11.21

单链表的尾插法建立

链表的建立首先需要一个结构体,结构体内部包括数据域和指针域。

typedef struct _node{
    int data ;//数据域
    struct *next;//指针域
}Node,*LinkList;

其次 要有一个head指针,存放头结点的地址,称之为头指针,头指针的数据域一般不存放数据。

头结点的指针域head->next,存放首元节点的地址。

 最后一个节点不在指向其他节点,它的指针域为NULL;

链表初始化

代码如下

	struct LinkList* head = (struct LinkList*)malloc(sizeof(struct LinkList));//创建头结点,并分配内存,需要的内存大小就是结构体的大小。别忘了在malloc前进行强制类型转换。(struct LinkList*)
	head->next = NULL;//头结点指针初始化
	struct LinkList* p ;//创建p结点 p结点在尾插法中用于记录链表尾结点,将来插入结点的时候只需要向p结点后插入即可。
	p = head;//p结点指针赋值为头结点

利用尾插法插入新节点建立单链表。

从一个空表开始,重复读入数据,生成新节点,将读入的数据存放到新节点的数据域中,然后将新节点插入到当前链表的表尾上,直至读入结束标志。

完整代码如下

#include <stdio.h>
#include <stdlib.h>//里面包含了malloc函数
typedef struct _node{
    int data ;//数据域
    struct _node* next;//指针域
}Node;
int main(void)
{
	Node* head = (Node*)malloc(sizeof(Node));//创建头结点,并分配内存,需要的内存大小就是结构体的大小。
	head->next = NULL;//头结点指针初始化
	Node* p ;//创建p结点 p结点在尾插法中用于记录链表尾结点,将来插入结点的时候只需要向p结点后插入即可。
	p = head;//p结点指针赋值为头结点
	int n;
	printf("请输入链表长度:\n");
	scanf("%d", &n);
	printf("输入数据:\n");
	for (int i = 0; i < n; i++)//循环创建结点
	{
		Node* s = (Node*)malloc(sizeof(Node));//创建s结点,并分配内存
		scanf("%d", &s->data);//给s结点赋值。
        p->next = s;
        s->next = NULL;//让插在尾部的s结点的指针指向NULL。
        p = s;//p结点保存刚才的s结点;以保证p始终为链表的最后一个节点
	}//至此,链表的创建已经完成了。

	p = head;//让p指针从"头"开始。
	while (p->next != NULL)//如果p的下一个结点不为NULL,也就是说如果p结点后还有节点存在,那就输出p后面结点中保存的数据。
	{
		printf("%d", p->next->data);
		p = p->next;//p结点后移
			printf("\n");
	}
	printf("\n");
	return 0;
}//至此完成了链表的遍历输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值