您的位置:首页 > 其它

创建和引用单链表

2016-04-09 12:06 260 查看

首先让我们看看单链表的定义:

单向链表:

1:单链表有一个头节点head,指向链表在内存的首地址。

2:链表中的每一个节点的数据类型为结构体类型,节点有两个成员:整型成员(实际需要保存的数据)和指向下一个结构体类型节点的指针即下一个节点的地址
(事实上,此单链表是用于存放整型数据的动态数组)。

3:链表按此结构对各节点的访问需从链表的头找起,后续节点的地址由当前节点给出。

4:无论在表中访问那一个节点,都需要从链表的头开始,顺序向后查找。链表的尾节点由于无后续节点,其指针域为空,写作为NULL。

单链表的创建过程有以下几步:

1 ) 定义链表的数据结构;

2 ) 创建一个空表;

3 ) 利用malloc ( )函数向系统申请分配一个节点;

4 ) 将新节点的指针成员赋值为空。若是空表,将新节点连接到表头;若是非空表,将新节点接到表尾;

5 ) 判断一下是否有后续节点要接入链表,若有转到3 ),否则结束;

下面给出相应代码:
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

//单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。

typedef struct link_list //定义了链表的数据结构

{

struct link_list *next;

int data;

}node;

node *creat(void)
//函数功能创建一个单链表 并返回

{

node *h=NULL;

node *p=NULL;

node *q=NULL;//h头节点 p存储数据的节点 q终端节点 其指针域为空

int x;

h = NULL;
//创建一个空表

printf("input x(x==0时结束输入):");

scanf("%d", &x);

while (x != 0)

{

p = (node *)malloc(sizeof(node)); //
函数malloc分配一个类型为ListNode的结点变量的空间, 并将其首地 址放入指针变量p中

p->data = x;

//链节的数据域存放数据x;

if (h == NULL)
//h为头指针,如果其为空 指向下一个节点

{

h = p;
//若为空表,接入表头

}

else

{

q->next = p;
//非空表 接到表尾

}

q = p;

scanf("%d", &x);

}

//free(p); //申请到的没录入,所以释放掉

//p = NULL; //使指向空

//q->next = NULL; //到表尾了,指向空

if (h)
//若头指针为空 则整个链表为空

q->next = NULL;

printf("链表输入结束(END)\n");

return h;
//链表创建好后返回头节点

}

void print_list(node *head)

{

node *temp = head;

printf("\n\n\n链表存入的值为:\n");

while (temp != NULL)

{

printf("%d ", temp->data);

temp = temp->next;

}

}

int main()

{

node *L = NULL;

L = creat();

print_list(L);

return 0;

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