要闻:C语言实现单链表-增删改查
(相关资料图)
链表是由一连串节点组成的数据结构,每个节点包含一个数据值和一个指向下一个节点的指针。链表可以在头部和尾部插入和删除节点,因此可以在任何地方插入和删除节点,从而使其变得灵活和易于实现。
链表通常用于实现有序集合,例如队列和双向链表。链表的优点是可以快速随机访问节点,而缺点是插入和删除操作相对慢一些,因为需要移动节点。此外,链表的长度通常受限于内存空间,因此当链表变得很长时,可能需要通过分页或链表分段等方式来管理其内存。
下面是一套封装好的单链表框架,包括创建链表、插入节点、删除节点、修改节点、遍历节点和清空链表等常见操作,其中每个节点存储一个结构体变量,该结构体中包含一个名为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语言实现单链表-增删改查
2023-05-25 -
汉字找茬王厣找出18个字通关攻略指南 环球速讯
2023-05-25 -
中国海诚(002116):5月25日技术指标出现观望信号-“黑三兵” 当前独家
2023-05-25 -
奔腾T90:国民SUV,精准拿捏用车需求 即时看
2023-05-25 -
粤万年青董秘回复:公司一直在积极推进相关项目的进展工作,但因其仍存在不确定性
2023-05-25 -
24节气春分是什么意思(春分是什么意思) 微头条
2023-05-25 -
孩子“小升初”在即却没有户口,夫妻晚上 6 点“冲进”派出所
2023-05-25 -
塑料都是绝缘体吗(塑料为什么是绝缘体)
2023-05-25 -
每日热闻!AI前哨|ChatGPT捧红OpenAI创始人:追随者仰慕 抗议者怒斥其诈骗
2023-05-25 -
空之要塞启航乌鸦值得培养吗
2023-05-25 -
全球快消息!美华新材年处理7万吨废旧锂电池材料综合回收利用项目开工
2023-05-25 -
titanium是什么材料_titanium dioxide_当前速讯
2023-05-25 -
煮蛋器投手配方在哪里得_煮蛋器投手
2023-05-25 -
天天日报丨6-3,6-3!商竣程横扫罗马大师赛黑马,距离法网正赛仅一步之遥
2023-05-25 -
机构观点2023年05月25日
2023-05-25 -
当前速讯:今年,担心的还是发生了!
2023-05-25 -
全球最新:助力电竞英雄,AutoFull傲风成为“亚运征途”赛事特约合作伙伴
2023-05-25 -
每日聚焦:台湾姑娘当汉语老师教口译
2023-05-25 -
为了找到走丢的狗,“女菩萨”拍起了公益擦边视频
2023-05-25 -
环球关注:马龙0-4惨败被质疑打假球!
2023-05-25 -
同程旅行2023年一季度营收25.9亿元_天天热门
2023-05-25 -
当前热文:来一盘清蒸大白蟹
2023-05-25 -
中自科技:5月24日融资买入84.7万元,融资融券余额3567.02万元
2023-05-25 -
生化危机五打不开_生化危机5玩不了
2023-05-25 -
精选!霍州市
2023-05-25 -
宁波莱佛士学院_天天看热讯
2023-05-25 -
汽车水箱多久加一次水卡罗拉_汽车水箱多久加一次水
2023-05-25 -
研究显示我国青少年健康行为整体情况良好-百事通
2023-05-25 -
定溪村村民委员会
2023-05-25 -
全球百事通!智能化作战应注重“稳中取胜”
2023-05-25
-
守住网络直播的伦理底线
2021-12-16 -
石窟寺文化需要基于保护的“新开发”
2021-12-16 -
电影工作者不能远离生活
2021-12-16 -
提升隧道安全管控能力 智慧高速让司乘安心
2021-12-16 -
人民财评:提升消费体验,服务同样重要
2021-12-16 -
卫冕?突破?旗手?——武大靖留给北京冬奥会三大悬念
2021-12-16 -
新能源车险专属条款出台“三电”系统、起火燃烧等都可保
2021-12-16 -
美术作品中的党史 | 第97集《窗外》
2021-12-16 -
基金销售业务违规!浦发银行厦门分行等被厦门证监局责令改正
2021-12-16 -
保持稳定发展有支撑——从11月“成绩单”看中国经济走势
2021-12-16