c语言实现单链表建立,插入,删除,查找,循环链表,静态链表
来源:互联网 发布:上瘾网络剧类似的 编辑:程序博客网 时间:2024/06/05 00:38
- 单链表结点结构
typedef struct LNode{ ElemType data; struct LNode * next;}LNode, *LinkList;
- 元素插入
头插法,逆向建立单向链表,每次在头结点之后插入元素
LinkList CreateList1 (LinkList L){ LinkList s;//链表元素指针 int x; L = (LinkList)malloc(sizeof(LNode)); //不需要预先分配连续的内存空间 L->next = NULL; scanf("%d", &x); while (x != 9999){ s = (LinkList)malloc(sizeof(LNode)); s->data = x; s->next = L->next; L->next = s; scanf("%d", &x); } return L;}
尾插法,从表头到表尾正向建立,每次在表尾插入元素
LinkList CreateList2 (LinkList L){//多了一个尾节点的指针 LinkList s;//链表元素节点指针 LinkList r;//尾节点指针 int x; L = (LinkList)malloc(sizeof(LNode)); r = L;//尾节点先指向头结点 scanf("%d", &x); while (x != 9999){ s = (LinkList)malloc(sizeof(LNode)); s->data = x; r->next = s; r = s; scanf("%d", &x); } r->next = NULL;//别忘记最后一个指的是空指针,这样方便遍历 return L;}
- 取出第i个位置的节点指针
LinkList GetElem(LinkList L, int i){ int j = 1; LinkList p = L->next;//指向j=1对应的结点 if(i < 1) return NULL; if(i == 0) return L;//在第一个位置插入元素就是在头结点后面插入 while(p && j<i){ p = p->next; j++; } return p;}
- 返回第一个为e的结点的指针
LinkList LocateElem(LinkList L, ElemType e){ LinkList p = L->next; while(p && p->data != e){ p = p->next; } return p;}
- 在第i的位置插入e元素
LinkList InsertElem(LinkList L, ElemType e, int i){ if(i < 1) return NULL; LinkList s; s = (LinkList)malloc(sizeof(LNode)); s->data = e; LinkList p = GetElem(L, i-1); s->next = p->next; p->next = s; return L;}
- 将i位置的元素删除
LinkList DeleteElem(LinkList L, int i){ if(i < 1) return NULL; LinkList p = GetElem(L, i-1); LinkList q = GetElem(L, i); p->next = q->next; free(q); return L;}
- 除已知结点p,时间复杂度O(1)
void DeleteNode(LinkList p){ //p为已知结点,要求时间复杂度为1,因此减少查找 LinkList q = p->next; p->data = q->data; p->next = q->next; free(q);}/*相当于删除后继节点,进行值的拷贝,这个思想需要注意*/
双链表结点
/*双链表结点*/typedef struct DNode{ ElemType data; struct DNode *prior ,*next;}DNode, *DLinkList;
静态链表结点
typedef struct{ ElemType data; int next; //下一个元素的下标}SLinkList[MaxSize];
阅读全文
0 0
- c语言实现单链表建立,插入,删除,查找,循环链表,静态链表
- C语言:动态链表的建立,查找,删除,插入功能的实现
- c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析
- 循环链表的建立,查找,删除
- C语言链表的插入和删除、建立
- C语言链表的建立、插入和删除
- C语言习题 链表建立,插入,删除,输出
- 链表的建立,输出,删除,插入运算的c语言实现
- C语言---双向链表的插入、删除、查找操作
- C语言---双向链表的插入、删除、查找操作
- C语言实现带头结点的链表的创建、查找、插入、删除
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C语言实现链表的创建,初始化,插入,删除,查找
- C语言顺序表的插入、删除、查找操作实现
- C语言实现顺序表的初始化,插入,删除,查找
- 有序插入建立链表 C语言实现
- 链表的基本操作(C语言版):建立,插入,删除,查找,输出
- 链表的建立,插入,删除,查找(1)
- Linux下安装ffmpeg
- 配置篇 04. 硬盘分区 ❀ Windows Server 2016
- freeswitch配置之全局变量
- POJ 3628 Bookshelf 2
- Git与github基本操作
- c语言实现单链表建立,插入,删除,查找,循环链表,静态链表
- "undefined reference to `pthread_xxx'"
- 字符串循环右移K位
- 多线程-读写锁
- How to Config the Pi with a Static IP
- Oracle存储过程procedure与函数function区别
- 数据结构 队列
- 深入理解Java的Annotation系列-第二部分 自定义注解
- Spring MVC @RequestBody 获取前台json或json数组