您的位置:首页 > 其它

单向链表创建与遍历

2017-06-18 20:56 281 查看
        单向链表的节点基本由2个元素组成——数据字段和指针,前者存储数据,后者指向下一个元素的内存所在地址。在C++中动态创建单向链表,一般先定义一个类,类中包含数据字段和指针,该指针的类型与此类相同,作用就是指向下一个链表节点。设ptr为链表的读取游标,创建链表节点的C++算法是:

1.ptr指向链表头;

2.动态分配内存给新节点;

3.将ptr指针指向新节点内存,表示这是新的链表尾部;

4.新节点当前为链表的最后一个元素,所以将它的指针(Next)指向NULL;

5.将链表尾部的指针(Next)指向下一新元素。

prt->Next = NewNode;
NewNode->Next = NULL;
ptr = ptr->Next;

#include <iostream>
using namespace std;

class List
{
public:
// 数据字段
int iNum;
int iScore;
char cName[12];
//指针
class List *Next;
};
typedef class List Node;
typedef Node *SingleLinkedList;

int main()
{
SingleLinkedList pHead;    //链表头
SingleLinkedList pNewNode; //新节点
SingleLinkedList ptr;      //遍历游标

//创建链表头
cout<<"请输入5位学生的数据:"<<endl;
pHead = new Node;   //创建链表头的指针
if (!pHead)
{
cout << "内存分配失败!" << endl;
return false;
}
cout << "请输入第1位学生的学号:";
cin >> pHead->iNum;
cout << "请输入第1位学生的姓名:";
cin >> pHead->cName;
cout << "请输入第1位学生的成绩:";
cin >> pHead->iScore;
ptr = pHead;                 //ptr指向链表头
//创建其余4个节点
for (int i = 0;i < 4;i++)
{
pNewNode = new Node;    //动态分配内存给新节点
if(!pNewNode)
{
cout << "内存分配失败!" <<endl;
return false;
}
cout << "请输入第" << i+2 << "位学生的学号:";
cin >> pNewNode->iNum;
cout << "请输入第" << i+2 << "位学生的姓名:";
cin >> pNewNode->cName;
cout << "请输入第" << i+2 << "位学生的成绩:";
cin >> pNewNode->iScore;
ptr->Next = pNewNode;  //将ptr指针指向新节点内存,表示这是新的链表尾部
pNewNode->Next = NULL; //新节点当前为链表的最后一个元素,所以将它的指针(Next)指向NULL
ptr = ptr->Next;       //将链表尾部的指针(Next)指向下一新元素
}

//遍历输出
cout << "输出链表内容为:
4000
" << endl;
cout << " 学号\t姓名\t\t成绩" << endl;
ptr = pHead;    //ptr指向链表头
while(NULL != ptr)
{
cout << ptr->iNum << "\t" << ptr->cName << "\t" << ptr->iScore << endl;
ptr = ptr->Next;
}

//释放内存
ptr = pHead;    //ptr指向链表头
SingleLinkedList pTemp;
while(NULL != ptr)
{
pTemp = ptr;
ptr = ptr->Next;
delete pTemp;pTemp = NULL;
}

return true;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: