数据结构线性表的两种存储形式顺序表和单链表的比较
来源:互联网 发布:矩阵qr分解 编辑:程序博客网 时间:2024/06/05 14:17
#include <iostream>#include <iostream>#include<stdio.h>#include<malloc.h>#define MaxSize 50using namespace std;typedef char ElemType;typedef struct{ ElemType data[MaxSize]; int length;} SqList;typedef char ElemType;void InitList(SqList *&L){ L=(SqList*)malloc(sizeof(SqList)); L->length=0;}void DestroyList(SqList*&L){ free(L);}bool ListEmpty(SqList*L){ return (L->length==0);}int ListLength(SqList*L){ return (L->length);}void DispList(SqList*L){for(int i=0; i<L->length; i++) printf("%c ",L->data[i]); printf("\n");}bool GetElem(SqList *L,int i,ElemType &e){ if(i<1||i>L->length) return false; e=L->data[i-1];///注意,此时i是个数 return true;}int LocateElem(SqList*L,ElemType e){ int i=1; while(i<=L->length&&L->data[i]!=e) i++; if(i>L->length)///注意,此时i是下标 return 0; else return i+1;///注意,此时i是下标}bool ListInsert(SqList *&L,int i,ElemType e){ int j; if(i<1||i>L->length+1) return false; i--; ///从右向左处理 for(j=L->length; j>i; j--) L->data[j]=L->data[j-1]; L->data[i]=e; L->length++; return true;}bool ListDelete(SqList *&L,int i,ElemType &e){ if(i<1||i>L->length) return false; i--; ///从左向右处理 e=L->data[i]; for(int j=i; j<L->length-1; j++) L->data[j]=L->data[j+1]; L->length--; return true;}int main(){ SqList *L; ElemType e; InitList(L);///这一句很重要哎,没有初始化不行 printf("顺序表操作试验如下:\n"); printf("采用尾插法插入元素a,b,c,d\n"); ListInsert(L,1,'a'); ListInsert(L,2,'b'); ListInsert(L,3,'c'); ListInsert(L,4,'d'); GetElem(L,3,e); printf("获得第3个位置上的元素%c\n",e); printf("b这个元素所在位置%d\n",LocateElem(L,'b')); ListDelete(L,2,e); printf("删除第2个元素后输出顺序表:\n"); DispList(L); return 0;}
<img src="http://img.blog.csdn.net/20160330094641269?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
#include <iostream>#include<malloc.h>#include<cstdio>using namespace std;typedef char ElemType;typedef struct LNode{ ElemType data; struct LNode *next;}LinkList;void InitList(LinkList *&L){ L=(LinkList*)malloc(sizeof(LinkList)); L->next=NULL;}void DestroyList(LinkList *&L){ LinkList *p=L->next,*pre=L; while(p!=NULL) { free(pre); pre=p; p=pre->next; } free(pre);}int ListLength(LinkList*L){ int n=0; LinkList *p=L; while(p->next!=NULL) { n++; p=p->next; } return n;}bool ListEmpty(LinkList *L){ return L->next==NULL;}void DispList(LinkList *L){ LinkList *p=L->next; while(p!=NULL) { printf("%c ",p->data); p=p->next; } printf("\n");}bool GetElem(LinkList *L,int i,ElemType &e){ int j=0; LinkList *p=L; while(p!=NULL&&j<i)///注意求线性表中元素值需找第i个节点呢 { j++; p=p->next; } if(p==NULL) return false; else { e=p->data; return true; }}int LocateElem(LinkList*L,ElemType e){ int i=1; LinkList*p=L->next; while(p!=NULL&&p->data!=e) { i++; p=p->next; } if(p==NULL) return 0; else return i;}bool ListInsert(LinkList*L,int i,ElemType e)///插入删除需要找到第i-1个节点{ LinkList *p=L,*s; int j=0; while(p!=NULL&&j<i-1) { p=p->next; j++; } if(p==NULL) return false; else { s=(LinkList*)malloc(sizeof(LinkList)); s->data=e; s->next=p->next; p->next=s; return true; }}bool ListDelete(LinkList*L,int i,ElemType &e)///插入删除需要找到第i-1个节点{ LinkList *p=L,*q; int j=0; while(p!=NULL&&j<i-1) { p=p->next; j++; } if(p==NULL) return false; else { q=p->next; if(q==NULL) return false; e=q->data; p->next=q->next; free(q); return true; }}int main(){ LinkList*L; ElemType e; InitList(L); ListInsert(L,1,'f'); ListInsert(L,2,'a'); ListInsert(L,3,'n'); ListInsert(L,4,'n'); ListInsert(L,5,'v'); GetElem(L,3,e); printf("该单链表中第3个元素是%c\n",e); printf("该单链表中a元素是第几个元素%d\n",LocateElem(L,'a')); ListDelete(L,2,e); printf("删除第2个元素后输出单链表\n"); DispList(L); return 0;}
总结:顺序表操作主要是数组操作,而单链表操作则是一个一个节点操作
必须要初始化表
在单链表中求长度和参数有i时候定义LinkLsit *p=L,其他时候定义为LinkList *p=L->next;
0 0
- 数据结构线性表的两种存储形式顺序表和单链表的比较
- 【数据结构】对于线性表的顺序和链接两种存储方式的主要优缺点
- 【线性表一:】两种存储结构的代码实现:顺序存储和链式存储
- 【数据结构】线性表的顺序存储结构
- 数据结构之线性表的顺序存储
- 数据结构 线性表的顺序存储
- 数据结构:线性表的顺序存储
- 【数据结构】线性表的顺序存储结构
- 数据结构-线性表的顺序存储
- 数据结构——线性表(一)线性表的顺序存储和单链表
- 数据结构--顺序表和单链表的比较
- 简要比较线性表的顺序存储结构和链式存储结构
- 顺序存储(数组)和链式存储(指针)的比较以及线性表小解义
- 线性表_顺序存储结构和链式存储结构的优缺点比较(区别)
- 数据结构2----线性表顺序存储和链式存储的实现(霜之小刀)
- 数据结构_线性表_顺序/链式存储优缺点比较
- 数据结构一 线性表的顺序存储结构
- 跟我学数据结构--线性表的顺序存储
- Java到底是传值还是传引用
- 批量备份存储与函数的方法
- MySQL详解--锁
- 一个数组dataArr,我现在拿到一个对象A,想判断在数组中有没有这个对象A,如果存在则从数组dataArr中删除A,如果不存在则将A加入到数组dataArr中
- Mapreduce中Combiner的使用以及注意点
- 数据结构线性表的两种存储形式顺序表和单链表的比较
- 关于 android 中 postDelayed方法的讲解
- Android App打包自动生成版本号Versin Name与Version Code方法之完美方案
- FreeMarker与SpringMVC整合实例代码教程
- OC学习-block处理
- 百度地图集成
- poj-3267 The Cow Lexicon【dp】
- AccountManager
- OMAPL138upp