线性表(链式存储结构)
链式与顺序结构的最大区别在于,插入或删除操作需要移动大量元素。
链表类型:单链表,循环链表,双向链表。
单链表的组成:每个数据元素内包括两个域:数据域和指针域。
单链表的创建方式有两种:一种是头插法和尾插法。
循环链表:单链表最后一个节点的指针域不为空而是指向链表的头结点。
双向链表与单链表的区别在于为了直接获取节点的前趋而加上一个指向前趋节点的指针域。
#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct Node{ ElemType data; struct Node *next; }ListNode; typedef ListNode *LinkList; /** ***插入 ***/ void InsertList(LinkList head, int i, ElemType x) { ListNode *p, *s; int j = 0; p = head; while(p != NULL && j < i - 1) { p = p->next; ++j; } if (p == NULL) { printf("ERROR\n"); return ; } else { s = (ListNode *)malloc(sizeof(ListNode)); s->data = x; s->next = p->next; p->next = s; } } /** *** 删除 **/ ElemType DeleteList(LinkList head, int i) { ListNode *p, *s; ElemType x; int j = 0; p = head; while (p != NULL && j < i - 1) { p = p->next; ++j; } if (p == NULL) { printf("position error\n"); return -1; } else { s = p->next; p->next = s->next; x = s->data; free(s); return x; } } /** **头插法 **/ LinkList CreateListHead() { LinkList head = NULL; ListNode *p; int ch; while( (ch = getchar() )!= '\n') { p = (ListNode *)malloc(sizeof(ListNode)); p->data = ch; p->next = head; head = p; } return head; } /** ** 尾插法 **/ LinkList CreateListTail() { LinkList head = (ListNode *)malloc(sizeof(ListNode)); ListNode *p, *r; int ch; r = head; while( (ch = getchar()) != '\n') { p = (ListNode *)malloc(sizeof(ListNode)); p->data = ch; r->next = p; r = p; } r->next = NULL; return head; } ListNode *LocateNodek(LinkList head, ElemType k) { ListNode *p = head->next; while(p && p->data != k) { p = p->next; } return p; } ListNode *GetNodei(LinkList head, int i) { ListNode *p; int j = 1; p = head->next; while( p!= NULL && j < i) { p = p->next; ++j; } if (j == i) return p; else return NULL; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!