数据结构入门学习系列-5(链表的基本操作算法)
来源:互联网 发布:单片机读写sd卡 编辑:程序博客网 时间:2024/06/07 01:22
链表的基本操作算法,直接参照部分代码:
链表的创建,分为两种,一种是队尾插入,一种是队头插入:
typedef struct LNode { ElemType data; struct LNode *next;} LNode;//创建链表(头插入法)LNode *create_LinkList_Head(){ int data; LNode *head, *p; head = (LNode *)malloc(sizeof(LNode)); head->next = NULL;//创建头结点 while(1){ scanf("%d",&data); if(data == 32767) break; p->data = data; p->next = head->next; head->next = p; } //钩链,新建的节点是头结点 return head;}//创建链表(尾插入法)Lnode *create_LinkList_Tail(){ int data; LNode *head, *p ,*q; head = q = (LNode*)malloc(sizeof(LNode)); q->next =NULL; while(1){ scanf("%d",&data); if(data == 32767) break; p = (LNode*)malloc(sizeof(LNode)); p->data= data; p->next = q->next; p=q->next; q=p; //钩链,新建的节点是最后一个节点 } return head;}
对于单链表,如果没有明确指出直接后继,那么钩链的次序必须是:先右后左。
对于单链表的查找同样有两种方式:按照位置查找和按照值来查找。
首先来看按照位置查找:
//按照序号查找ElemType Get_Elem(LNode *l,int i){ int j = 0; LNode *p; p=l->next; for(j=0;j<i;j++){ if(p->next = NULL) return ERROR; p=p->next; } return p->data;}链表不像之前的顺序表,直接按照位置i就能找到相应的元素,而是需要从链表的头出发,依次查找,直到找到对应的元素为止。就查找来说,单链表的复杂度比顺序存储表时间度要复杂。
按照值来查找:
//按照值查找LNode *Get_Position(LNode *l, ElemType key){ LNode *p; for( p=l->next;p;p=p->next){ if(key == p->data) return p; } return NULL;}按照值来查找,也是同样需要从链表的头结点出发,依次比较:
//按照值查找LNode *Get_Position(LNode *l, ElemType key){ LNode *p; for( p=l->next;p;p=p->next){ if(key == p->data) return p; } return NULL;}单链表的插入需要知道插入位置和插入元素,之前介绍过链表的一些钩链操作。其实插入就是先查找,再钩链的过程。具体可以参照如下code:
//链表插入元素e到i位置void Insert_ElemType(LNode *l, int i, ElemType e){ LNode *p = l->next; for(int j=0;j<i;j++) { if(p==NULL) return NULL; p = p->next; } LNode q = (LNode *)malloc(sizeof(LNode)); q->data = e; q->next = p->next; p->next = q;}同样,删除操作就是先查找再断链,然后释放的过程。切记删除元素一定要释放内存:
//按位置序号删除元素void Delete_ElemType(LNode *l,int i){ LNode *p=l; LNode *q=l->next; for(int j=0;j<i;j++) { if(p==NULL) return NULL; p=q; q = q->next; } p->next = q->next; free(q);}//按照值删除元素void Delete_Elem(LNode *l, ElemType e){ LNode *p=l; LNode *q=l->next; for( ;p;p->next) { p = q; q = q->next; if(p->data == key) break; } p->next = q->next; free(q);}
阅读全文
0 0
- 数据结构入门学习系列-5(链表的基本操作算法)
- 数据结构入门学习系列-2(算法的时间复杂度)
- 数据结构入门学习系列-1(基本数据结构)
- 数据结构与算法系列-串-串的基本操作
- 数据结构入门学习系列-6(链表合并与多项式合并算法)
- 数据结构与算法-链表的基本操作---ShinPans
- 新手学习数据结构与算法---单链表的基本操作
- 【学习总结】数据结构之循环链表的基本操作
- 数据结构学习笔记(顺序表的基本操作)
- 数据结构入门学习系列-7(栈的结构以及存储方式和算法)
- 数据结构学习之单向链表的基本操作(非递归实现)
- 数据结构学习之双向循环链表的基本操作(非递归实现)
- 数据结构学习笔记(二) 链表之单链表的基本操作
- 数据结构 链表的基本操作
- 数据结构:链表的基本操作
- 数据结构--二叉链表的基本操作
- 【数据结构】链表的基本操作
- 数据结构之链表的基本操作
- python基础(二)
- hadoop搭建 之 Pression denied!【问题】
- 如何在git hash上使用vim
- Hbase之filter
- 1、ant入门-001
- 数据结构入门学习系列-5(链表的基本操作算法)
- zlog使用手册首例错误记录,hello word , init failed
- amcl算法问题
- 第八周项目4 稀疏矩阵的三元组表示的实现及应用
- c#读书笔记
- C++风格_auto
- Ceph架构介绍及使用(RBD部分)
- Pycharm用鼠标滚轮控制字体大小的
- luogu P2014 选课 树形背包