指针处理链表

目录

前言

什么是链表

引用库函数

创建结构体

静态链表建立与输出

动态链表建立

动态链表输出

 总结


前言

        C语言中链表所带来的关系有些许复杂,现在对链表创建以及输出做一个记录,以便于以后进行复习,并且更清楚的认识链表。

什么是链表

链表有一个“头指针”变量,图中以head表示,它存放一个地址,该地址指向一个元素。

链表中每一个元素称为“结点”,每个结点都应包括两个部分:

 (1) 用户需要用的实际数据;

 (2) 下一个结点的地址。

head指向第1个元素,第1个元素又指向第2个元素……直到最后一个元素,该元素不再指向其他元素,它称为“表尾”,它的地址部分放一个“NULL(表示“空地址”),链表到此结束。

可以用结构体变量建立链表。一个结构体变量包含若干成员,这些成员可以是数值类型、字符类型、数组类型,也可以是指针类型。用指针类型成员来存放下一个结点的地址。

引用库函数

#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(stu)

创建结构体

typedef struct student
{
	long id;
	char name[20];
	int score;
	struct student *next;
}stu;

静态链表建立与输出

 

int main()
{
	stu a, b, c;//定义三个结构体,3为链表长度
	stu* head, * p;//定义链表的起始位置和移动链表的变量
	p = head = &a;//将链表的初始位置赋予head和p
	a.next = &b;
	b.next = &c;
	c.next = NULL;//连接结构体成为链表
	while (p != NULL)
	{
		scanf("%d%s%d", &p->id, p->name, &p->score);//输入链表参数
		p = p->next;
	}
	p = head;
	while (p != NULL)
	{
		printf("%d %s %d\n", p->id, p->name, p->score);//输出链表
		p = p->next;
	}
	return 0;
}

动态链表建立

stu *creat(void)
{
	stu* p1, * p2, * head;//head和p2分别为链表的头指针变量和终止指针变量,p1为移动结点
	head = NULL;//初始化头指针变量
	n = 0;//用于计算动态链表长度
	p2 = p1 = (stu*)malloc(LEN);//为p1,p2在堆中开辟新的空间
	scanf("%ld%s%d", &p1->id, p1->name, &p1->score);//输入第一个结点的值,方便接下来判度胺
	while (p1->id != 0)
	{
		n++;
		if (n == 1)
			head = p1;//如果为第一个结点,就赋予head
		else
			p2->next = p1;//否则将p2与p1两个结点连接
		p2 = p1;//将p2移动至p1位置
		p1 = (stu*)malloc(LEN);//再为p1开辟新的空间
		scanf("%ld%s%d", &p1->id, p1->name, &p1->score);
	}
		p2->next = NULL;//为链表结尾
	return head;
};

动态链表输出

int main()
{
	stu* head, * p;//head和p为头指针变量和移动的结点
	head = creat();//创建链表
	p=head;//将头节点赋予p
	while (p != NULL)
	{
		printf("%ld %s %d\n", p->id, p->name, p->score);//输出一个节点
		p = p->next;//将p移动至下一节点
	}
	return 0;
}

 总结

在处理链表时,不要搞混移动节点的顺序,并且注意变量类型为指针变量还是普通变量

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值