C语言中单链表的示例分析
发表于:2024-11-13 作者:千家信息网编辑
千家信息网最后更新 2024年11月13日,这篇文章将为大家详细讲解有关C语言中单链表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、思路步骤1. 定义结构体a.数据域:用来存放数据b.指针域:用
千家信息网最后更新 2024年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安全错误
数据库的锁怎样保障安全
建立数据库的工作流程
计算机网络技术的翻译
上海靓号八八网络技术有限公司
重庆市备用dns服务器
关系型数据库并发处理方案
软件开发 工作感想及建议
英文数据库金融
网络安全法应受什么处罚
怎样导出数据库表结构
网络安全应该怎么画手抄报
西城区信息网络技术推广品质保障
中国网络安全产业市场规模
外贸客户服务器
网络安全产品质量评估报告
数据库闭包求主键
ado操作数据库
西安跑腿app软件开发
软件开发过程架构
文科生计算机网络技术
潜江哪里有软件开发方案
网络技术国内外研究现状
数据库登录忘记密码
常用的数据库接口技术包括
盐城网络安全服务平台
access数据库如何编程
bench数据库是什么
揭阳市网络安全平台
免费的ipnet的数据库
网络安全的通知
sql数据库查询用户名密码