首页 > 民航

C语言实现单链表-增删改查

来源:DS小龙哥-嵌入式技术 时间:2023-05-25 19:51:07


(资料图片)

链表是由一连串节点组成的数据结构,每个节点包含一个数据值和一个指向下一个节点的指针。链表可以在头部和尾部插入和删除节点,因此可以在任何地方插入和删除节点,从而使其变得灵活和易于实现。

链表通常用于实现有序集合,例如队列和双向链表。链表的优点是可以快速随机访问节点,而缺点是插入和删除操作相对慢一些,因为需要移动节点。此外,链表的长度通常受限于内存空间,因此当链表变得很长时,可能需要通过分页或链表分段等方式来管理其内存。

下面是一套封装好的单链表框架,包括创建链表、插入节点、删除节点、修改节点、遍历节点和清空链表等常见操作,其中每个节点存储一个结构体变量,该结构体中包含一个名为data的int类型成员。

#include  #include  ​ // 链表节点结构体 typedef struct ListNode {     int data;                   // 节点数据     struct ListNode *next;      // 下一个节点的指针 } ListNode; ​ // 创建一个新节点 ListNode *createNode(int data) {     ListNode *node = (ListNode*) malloc(sizeof(ListNode));     node->data = data;     node->next = NULL;     return node; } ​ // 在链表头部插入一个新节点 ListNode *insertNodeAtHead(ListNode *head, int data) {     ListNode *node = createNode(data);     node->next = head;     return node; } ​ // 在链表尾部插入一个新节点 ListNode *insertNodeAtTail(ListNode *head, int data) {     ListNode *node = createNode(data);     if(head == NULL) {         return node;     } else {         ListNode *current = head;         while(current->next != NULL) {             current = current->next;         }         current->next = node;         return head;     } } ​ // 删除链表中第一个值为data的节点 ListNode *deleteNode(ListNode *head, int data) {     if(head == NULL) {         return NULL;     }     if(head->data == data) {         ListNode *current = head;         head = head->next;         free(current);         return head;     }     ListNode *current = head;     while(current->next != NULL && current->next->data != data) {         current = current->next;     }     if(current->next != NULL) {         ListNode *deleteNode = current->next;         current->next = deleteNode->next;         free(deleteNode);     }     return head; } ​ // 修改链表中第一个值为oldData的节点的数据为newData void updateNode(ListNode *head, int oldData, int newData) {     ListNode *current = head;     while(current != NULL) {         if(current->data == oldData) {             current->data = newData;             break;         } else {             current = current->next;         }     } } ​ // 遍历链表 void traverseList(ListNode *head) {     ListNode *current = head;     while(current != NULL) {         printf("%d ", current->data);         current = current->next;     }     printf(""); } ​ // 清空链表,释放所有节点的内存空间 void clearList(ListNode *head) {     while(head != NULL) {         ListNode *current = head;         head = head->next;         free(current);     } } ​ // 示例程序 int main() {     ListNode *head = NULL;     head = insertNodeAtHead(head, 1);     head = insertNodeAtHead(head, 2);     head = insertNodeAtTail(head, 3);     traverseList(head);     head = deleteNode(head, 2);     traverseList(head);     updateNode(head, 1, 4);     traverseList(head);     clearList(head);     return 0; }

在上述代码中,定义了一个节点结构体ListNode,其中包含一个int类型的data成员和一个指向下一个节点的指针。接着定义了用于创建新节点、插入节点、删除节点、修改节点、遍历节点和清空链表等操作的子函数,并在main函数中演示了这些操作的使用例子。在使用完链表后一定要调用clearList函数释放内存空间。

审核编辑:汤梓红

相关稿件

C语言实现单链表-增删改查

晚间公告丨5月25日这些公告有看头

华创证券:三季度行情或逐步回暖 黄鸡企业盈利迎来改善

5月粤A车牌竞价结果出炉,个人平均成交价破2万元

国家发改委发展战略和规划司发布郑重声明 全球观热点

35股年内腰斩!远离这一板块 A股优胜劣汰正加速 快看

中铁十四局新增1条被执行人信息,执行标的737万余元

携程集团与柬埔寨国家航空签订战略合作备忘录

2023年宁夏地区MBA院校学费汇总 热点聚焦

教育部开展“2023高考护航行动” 着力解决“急难愁盼”突出问题

简讯:广东1—4月CPI涨幅回落,PPI降幅扩大

环球热讯:简约不减爱 喜事新办有创意 婚俗改革改了什么?

全球观焦点:美民调:越来越多美国人担忧校园枪支暴力 比例达10年来最高

日本福岛核事故灾民:希望更多人一起反对核污染水排海-全球热文

加拿大专家:国债流动性堪忧 美国面临国债市场可能崩溃的威胁

世界今亮点!总投资超3亿元,占地46亩,古镇镇松伟灯饰总部开建

探寻深圳这座用“低碳”命名的建筑群背后的秘密 当前热文

vivo携手抖音生活服务,在生意发生的地方做品牌

今日聚焦!马登男鞋(马登)

股价跌去91.3%,知名房企怎么了?

今日关注:中金黄金:公司对未来黄金、铜的价格持乐观看法

美国债务上限逼近“悬崖” 两党谈判成赌博闹剧-世界观焦点

行走江苏湿地城市| 从“濒危鹿”到“社会鹿”,大丰麋鹿国家级自然保护区交出亮眼“生态答卷”!_每日观察

兴业银行落地数字人民币基金支付服务

今日视点:热评|踏雪而来,逐梦而上

中山首笔获“数字贷”支持项目投产,工业4.0厂房实现高度智能化

亿缕阳光|相信自己会发光_观热点

欧普,回家!|全球微动态

曲靖市民宗委到会泽新街乡调研乡村振兴和民族宗教工作 全球热资讯

当前视点!时政纪录片丨长安复携手 丝路启新程——习近平主席主持中国-中亚峰会纪实