站长网 安全 《数据结构》线性表:链式存储结构实现示例代码一(构造,遍历,

《数据结构》线性表:链式存储结构实现示例代码一(构造,遍历,

??????? 线性表:链式存储结构实现之一代码(构造,遍历,析构) ??????? 为了大家学习,便于掌握,将线性表的链式存储结操作算法分开讨论。本代码讨论“构造”链表操作、遍历操作和析构操作。 ???? ?? 本代码,代码放到一个文件里。大家可以将源码中三个

??????? 线性表:链式存储结构实现之一代码(构造,遍历,析构)

??????? 为了大家学习,便于掌握,将线性表的链式存储结操作算法分开讨论。本代码讨论“构造”链表操作、遍历操作和析构操作。

???? ?? 本代码,代码放到一个文件里。大家可以将源码中三个模块分别放到三个文件,像顺序存储实现一样。更利于代码的灵活应用。

#include<iostream>   //引用输入输出流库函数的头文件

/*************************/
/***** 声明模板类    *****/
/*************************/

template <class DataType>
struct Node
{
      DataType data;
      Node<DataType> *next;  
};

template <class DataType>
class LinkList
{
public:
	LinkList( );                         //构造函数,含头结点的空链表
	LinkList(DataType a[ ],int n);      //构造函数,建立有n个元素的单链表
	~LinkList( );                        //析构函数
	void PrintList( );                   //遍历操作,按序号依次输出各元素
private:
	Node<DataType> *first;               //单链表的头指针
};


/********************************/
/***** 定义模板类操作函数   *****/
/********************************/

template <class DataType>
LinkList<DataType> :: LinkList( )
{
	first = new Node<DataType>;                        //生成头结点
	first->next = NULL;                      //头结点的指针域置空
}

template <class DataType>  
LinkList<DataType> :: LinkList(DataType a[ ],int n)
{
	Node<DataType> *r,*s;
	first = new Node<DataType>;                    //生成头结点
	r = first;                            //尾指针初始化
	for (int i = 0; i < n; i++)
	{ 
		s = new Node<DataType>; s->data = a[i];        //为每个数组元素建立一个结点
		r->next = s; r = s;                 //将结点s插入到终端结点之后
	}
	r->next = NULL;        //单链表建立完毕,将终端结点的指针域置空
}

template <class DataType>
LinkList<DataType> :: ~LinkList( )
{
	Node<DataType> *q;
	while (first != NULL)        //释放每一个结点的存储空间
	{
		q = first;                 //暂存被释放结点
		first = first->next;         // first指向被释放结点的下一个结点
		delete q;    
	}
}

template <class DataType>
void LinkList<DataType> :: PrintList( )
{
	Node<DataType> *p = first->next;                 //工作指针p初始化
	while (p != NULL)
	{
		cout << p->data<<"  ";
		p = p->next;                 //工作指针p后移
	}
	cout<<endl;
}


using namespace std;

/********************************/
/*****       C++ 主函数       *****/
/*****    选定5个学生成绩    *****/
/********************************/


void main( )
{
  int Score[5]={99,93,89,76,88};
  LinkList<int> ScoreList(Score,5);//会调用带参构造函数。
  cout<<"链表数据为:"<<endl;
  ScoreList.PrintList( );      //显示链表中所有元素
 
}

注意的是:构造函数和析构函数由系统自己调用。

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/fuwuqi/anquan/2021/0523/4738.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部