1. 单链条简介
单链条是一种以链式存取的数据的结构,其主要利用结构体指针来实现不同数据的环环相链。其主要由节点组成,头链式中还有头指针始终指向单链中的第一个节点,生成头节点一般不参与实际输入数据存储,但可以实现其他用途,本文暂不做介绍。
链条作为一种高级数据表达有其独特的优势,它可以轻易实现通常数组不能做到的随输入数据的不同而实时变化分配数据,以及可以根据输入以及逻辑语句来删减或添加相应节点。
2.节点构成
节点由数据域以及指针域构成。其中数据域用来存放实际所需数据,指针域则用来指向下一个节点。
具体由结构体体现如下
typedef struct a={int a;struct a*next;}node;
//使用typedef主要用来自定义node这种数据类型,可以省去声明时前面要跟上的strcut
在此结构体中,int a即是数据域部分,它存储输入的int类型数据。
而struct anext则是指针域,用来指向下一个节点的存储地址,实现链节环环相扣。
struct anext这个形式是实现生成节点保持同一性的关键。它有点可以类比函数的递归,在结构体内部又定义了和自身相同的结构体,这样便能实现节点之间的”套娃“。
3.简单单链表实际形式
本人设计了一种单链表的程序形式。
如下。
#include<stdio.h>
#include<stdlib.h>
typedef struct a { int x; struct a* next;}node;
void main()
{
node* head = NULL;
node* p = (node*)malloc(sizeof(node));//我们定义了节点结构体外,还引入node*p来作为中介
node* c = (node*)malloc(sizeof(node));//初始化
while (c->x != -1)
{
c = (node*)malloc(sizeof(node));//为实现动态内存分配我们使用malloc函数,每需要生成一个节点时再给它分配空间
if (head == NULL)
head = c;//生成头节点
else p->next = c;//将p中next结构体指针地址等同于c地址
c->next = NULL;//使生成最后的节点指针域为NULL
scanf("%d",&c->x);
p = c;//让c中拥有能指向下一个节点的指针成员
}
if (c->x == -1) c->x = NULL;//-1数据抹除,输出0
c = head;//c回到头节点
while (c!= NULL)//当到尾节点时停止。
{
printf("%d\n",c->x);//显示每一个节点的数据
c = c->next;
}
}
(理解单链表对结构体指针以及指针知识的掌握要求较高,如果不熟悉往往无法理解关键过程)