创建一个单链表
那什么是单链表?
- 简单说一下
我的理解,其实链表和数组是有很多相似的地方的。链表作为一种数据结构,它是用来存储数据的,举一个很形象的例子,就比如说以前玩的那个贪吃蛇,就是链表的一个很好的应用。在玩贪吃蛇的时候,食物就相当于一个新的结点,而在链表中,有很多对链表的操作,比如说:头插,尾插,排序插,中间插等等你可以想象成,将贪吃蛇吃到的食物是放在,头,尾,或者中间,或者按颜色的顺序进行排列,其实链表不难,理解了之后,写起来也是挺有意思的
下面是创建一个链表的代码式例
写的很简单,用了一点c++但大多数还是c的语法,简单来说我的思路是,先创建一个结点(结构体)->然后在主函数里面,获取到屏幕的输入数据后,将此时输入的数据存到一个结点当中->然后将结点串起来,形成一个链表。将结点串起来的方法有很多上面有提到了,就不再重复->最后的最后,就是将链表打印输出了
#include<iostream>
using namespace std;
struct Node
{
int data;
struct Node * next;
};
int main()
{
struct Node * head = nullptr;
struct Node * tail = nullptr;
struct Node * pre = nullptr;
int data;
while(1)
{
//输入一个数
cin >> data;
if(data == 0)
{
break;
}
//初始化一个结点
struct Node * pnew = (Node *)malloc(sizeof(Node));
pnew->data = data;
pnew->next = nullptr;
//如果只有一个结点
if(head == nullptr)
{
head = pnew;
tail = pnew;
}
else//尾插
{
tail->next = pnew;//Tail的下一个指向新的结点 s
tail = pnew;//让Tail作为新的结点s,即Tail结点往后移
}
/*
头插
{
pnew->next = head;//将新的结点放在Head的前面
head = pnew;//Head结点则往前移
}
*/
}
//打印链表
while(head)
{
cout << " " << head->data;
pre = head;
head = head->next;
pre->next = nullptr;
free(pre);//释放堆空间
}
cout << endl;
return 0;
}