时间:2021-05-20
线性表包括两部分顺序表和链表,是数据结构的基础,在此主要就算法进行分析和总结,作为记忆了解,未做具体实现。
提示:以下是本篇文章正文内容,下面案例可供参考
在第i的位置插入元素e
在第i的位置插入元素e
已知La和Lb的元素按照非递减的顺序排列归并为Lc也为按值非递减排列
在带头结点L中的第i个位置之前插入e
1、算法解释
2、算法实现
status ListInsert(LinkList &l,int i;ElemType e){ LinkList p=L,S; int j=0; while(p&&j<i-1){ p=p->next; j++; } if(!p||j>i-1) return ERROR; //生成新节点 S=(LinkList)malloc(sizeof(LNode)); S->date=e; S->next=p->next; p->next=S; return OK; }在带头结点的单链表L中删除第i个元素,并返回e
1、算法解释
2、算法实现
status ListDelete_L(LinkList &L,int i,ElemType &e){LinkList p=L,q;int j=0;while(p->next&&j<i-1){ p=p->next; j++;}if(!(p-next)||j>i-1)return ERROR; q=p->next; p->next=q->next; e=q->date; free(q);return OK;代码如下(示例):找到第i个位置的元素,并赋值给e
1、算法解释
2、算法实现
status GetElem_L(LinkList L,int i,ElemType &e){ LinkList p; int j=1; p=L->next; while(p&&j<i){ p=p->next; j++; } if(!p||j>i) return ERROR; e=p->data; return OK; }已知La、Lb按值非递减 Lc也是按值非递减(带头结点)
1、算法解释
2、算法实现
void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){//记录结点LinkList Pa,Pb,Pc;Pa=La->next;Pb=Lb->next;Pc=Lc=La;while(Pa&&Pb){if(Pa->data<=Pb->data){ Pc->next=Pa; Pc++; Pa++; }else{ Pc->next=Pb; Pc++; Pb++; }}Pc->next=pa? Pa:Pb;free(Lb);}输入n个元素的值,建立带头结点的单链表L
1、逆位序(头插法)
算法思路
算法实现
void GreateList_L(LinkList &L,int n){//建立头结点LinkList L,P;L=(LinkList)malloc(sizeof(LNode);L->next=NULL;for(i=0;i<n;i++){ P=(LinkList)malloc(sizeof(LNode); scanf("%d",&P->data);//以整型为例 P->next=L->next; L->next=P; }}2、顺位序(尾插法)
算法思路
算法实现
void GreateList_L(LinkList &L,int n){//建立头结点LinkList L,P;L=(LinkList)malloc(sizeof(LNode);L->next=NULL;Q=L;for(i=0;i<n;i++){ P=(LinkList)malloc(sizeof(LNode); scanf("%d",&P->data);//以整型为例 Q->next=P Q=P; } q->next=NULL;}2.循环链表
与单链表类似,只是表尾结点的next指向了头结点,循环条件为是否等于表头元素,不再具体叙述!
3.双向链表
1、定义
//定义一个双向链表typedef struct DuLNode{ ELemType data;//数据元素 struct DuLNode *prior;//前驱指针 struct DuLNode *next;//后继指针}DuLNode,*DuLinkList;2、插入
在带头结点的双向循环链表L中的第i个结点(P)之前插入结点S的元素e
算法思路
算法实现
S->data=e;//赋值S-prior=p->prior;P->prior->next=S;S->next=P;P->prior=S;3、删除
在带头结点的双向循环链表L中删除第i个结点(P)并将其数据复制给元素e
算法思路
算法实现
e=P->data;q=P;P->prior->next=P->next;P->next->prior=P->prior;free(q);//释放结点P到此顺序表和链表的基本操作算法基本介绍完成,希望能对初学者有所帮助,后续会对数据结构后面的内容进行更新。更多相关C、C++线性表基本操作内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C++数据结构线性表-数组实现线性表的数组实现,实现几个核心的功能,语言是C++,如果有更好的想法和意见,欢迎留言~~~/*Author:Moyiii*线性表的
之前在学习c语言的时候用c语言实现了动态线性表。现在再使用c++实现一下动态线性表。相关数据结构方面就不多说了。在之前的博客里也有。下面就直接来实现吧。这里使用
C语言栈的表示和实现详细介绍定义:栈是限定仅在表尾进行插入和删除操作的线性表。栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出
1.基本概念:C语言的栈是指限定仅在表尾进行插入和删除操作的线性表。栈作为C语言中一种常用的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进
本文实例讲述了C++归并算法。分享给大家供大家参考。具体如下:/*归并算法:把两个或两个以上的线性表合并在一起,形成一个新的线性表函数模版的基本使用程序意图:将