C语言中单链表的示例分析
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章将为大家详细讲解有关C语言中单链表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、思路步骤1. 定义结构体a.数据域:用来存放数据b.指针域:用
千家信息网最后更新 2025年11月13日C语言中单链表的示例分析
这篇文章将为大家详细讲解有关C语言中单链表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一、思路步骤
1. 定义结构体
a.数据域:用来存放数据
b.指针域:用来存放下一个数据的位置
2.初始化
申请头结点,并将其初始化为空
3.求当前数据元素的个数
a.设置一个指针变量p指向头结点和计数变量size等于0
b.循环判断p->next是否为空,如果不为空,就让指针p指向它的直接后继结点,并让size自增
c.返回size
4.插入
a.设置两个指针,一个指向头结点,另一个要动态申请内存空间存放要插入的数
b.找到要插入位置的前一位,并判断插入位置是否正确
c.生成新结点,给新结点数据域赋值,执行步骤①,在执行步骤②
5.删除
a.设置两个指针p、q,p指向头结点,q指向要被删除的结点
b.找到要删除位置的前一位,并判断删除位置是否正确、存在
c.q指向被删除的结点,将被删除结点的数据域赋值给x,p指向被删除结点的下一个结点,释放q的内存空间
6.释放内存空间
最后记得将头结点置空哦!要不然容易出现野指针。
二、代码
#include#include typedef int DataType;//给int起个别名,方便以后修改typedef struct Node{ DataType data;//数据域 struct Node *next;//指针域}SLNode;//初始化void ListInit(SLNode **head){ *head = (SLNode *)malloc(sizeof(SLNode));//申请头结点 (*head)->next = NULL;}//求当前数据元素个数int ListLength(SLNode *head){ SLNode *p = head; int size = 0; while (p->next != NULL) { p = p->next; size++; } return size;}//插入int ListInsert(SLNode *head, int i, DataType x){ SLNode *p, *q; int j; p = head; j = -1; while (p->next != NULL && j < i - 1) { p = p->next; j++; } if (j != i - 1) { printf("插入参数位置错误!!!\n"); return 0; } q = (SLNode *)malloc(sizeof(SLNode));//生成新结点 q->data = x; q->next = p->next; p->next = q; return 1;}//删除int ListDelete(SLNode *head, int i, DataType *x){ SLNode *p, *q; int j; p = head; j = -1; while (p->next != NULL && p->next->next != NULL && j < i - 1) { p = p->next; j++; } if (j != i - 1) { printf("删除位置参数错误!!!\n"); return 0; } q = p->next; *x = q->data; p->next = p->next->next; free(q);//释放被删除结点的内存空间 return 1;}//按位取int ListGet(SLNode *head, int i, DataType *x){ SLNode *p; int j; p = head; j = -1; while (p->next != NULL && j < i) { p = p->next; j++; } if (j != i) { printf("取出位置参数错误!!!\n"); return 0; } *x = p->data; return 1;}//释放void ListDestroy(SLNode **head){ SLNode *p, *q; p = *head; while (p != NULL) { q = p; p = p->next; free(q); } *head = NULL;}int main(){ SLNode *head; int i, x; ListInit(&head); for (i = 0; i < 10; i++) ListInsert(head, i, i + 10); ListDelete(head, 9, &x); for (i = 0; i < ListLength(head); i++) { ListGet(head, i, &x); printf("%d ", x); } ListDestroy(&head); system("pause"); return 0;}
关于"C语言中单链表的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
结点
位置
数据
指针
内存
指向
空间
a.
参数
步骤
篇文章
错误
b.
向头
示例
语言
分析
两个
个数
元素
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器主机无法识别
武装突袭3国人的服务器
星辰零灯尤格萨隆是在哪个服务器
电脑连不上局域网某个人的服务器
杭州璧岐互联网科技有限公司
思唯网络安全工程
软件开发工程师自学视频
我国网络安全有多少条
计算机网络安全维护图片
深圳pc软件开发报价
共享童车系统软件开发公司
软件开发线上项目外包
mysql数据库查出来乱码
mysql数据库如何备份和还原
家庭服务器选什么cpu
水浒传手游服务器划分
青海省虚拟服务器管理软件云主机
西安中易互联网络科技
cs1.6服务器后台管理
光遇哪些服务器互通
计算机网络安全儿童画创意
xbox插网线连接不了服务器
2009英雄联盟数据库
宝格商贸互联网科技有限公司
单位网络安全态势研判
网警网络安全实操解题赛
一台服务器做几个raid
数据库找出至少生产两种
soul数据库用户信息
贵州正规软件开发