创建和引用单链表

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

单向链表:
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值