线性表的顺序存储与链式存储
2017-06-26 20:23
253 查看
线性表的顺序存储
线性表的链式存储
#include<iostream> #include<cstdlib> #include<iomanip> using namespace std; #define MaxSize 100 #define ElementType int typedef struct LNode *List; struct LNode{ ElementType data[MaxSize]; int Length; }L; List Ptr; //初始化 List MakeEmpty() { List PtrL; PtrL=(List)malloc(sizeof(struct LNode)); PtrL->Length=-1; return PtrL; } //查找 int Find(ElementType X,List PtrL) { int i=0; while(i<=PtrL->Length&&PtrL->data[i]!=X) i++; if(i>PtrL->Length) return -1; else return i; } //插入 void Insert(ElementType X,int i,List PtrL) { int j; if(PtrL->Length==MaxSize-1) { cout<<"表满"<<endl; return; } if(i<1||i>PtrL->Length+2) { cout<<"位置不合法"<<endl; return; } for(j=PtrL->Length;j>=i;j--) PtrL->data[j+1]=PtrL->data[j]; PtrL->data[i-1]=X; PtrL->Length++; return; } //删除 void Delete(int i,List PtrL) { int j; if(i<1||i>PtrL->Length+1) { cout<<"不存在第"<<dec<<i<<"个元素"<<endl; return; } for(j=i;j<=PtrL->Length;j++) PtrL->data[j-1]=PtrL->data[j]; PtrL->Length--; return; } //例子 int main() { int i,j; Ptr=MakeEmpty(); for(i=0;i<10;i++) { Ptr->data[i]=2*i; Ptr->Length++; } j=Find(4,Ptr); cout<<j<<endl; return 0; }
线性表的链式存储
#include<iostream> #include<cstdlib> #include<iomanip> using namespace std; #define MaxSize 100 #define ElementType int typedef struct LNode *List; struct LNode{ ElementType data; List next; }L; //初始化 List ListInit() { List PtrL; PtrL=(List)malloc(sizeof(struct LNode)); //申请结点空间 if(PtrL==NULL){ cout<<"申请空间失败"<<endl; //判断是否有足够的空间 } PtrL->next=NULL; return PtrL; } //头插法建立单链表(带头结点) List ListCreat1() { List head; head=ListInit(); ElementType x; while(cin>>x){ List p; p=(List)malloc(sizeof(struct LNode)); p->data=x; p->next=head->next; head->next=p; } return head; } //尾插法建立单链表(带头结点) List ListCreat2() { List head; head=ListInit(); //初始化一个空链表 List r; r = head; //r始终指向终端结点,开始时指向头结点 ElementType x; while(cin>>x){ List p; p=(List)malloc(sizeof(struct LNode)); //申请新的结点空间 p->data=x; //结点的数据域赋值 r->next=p; //将结点插入到表头head-->|1|-->|2|-->NULL r=p; } r->next=NULL; return head; } //求表长 int Length(List PtrL) { int j=0; List p=PtrL; //p指向表中的第一个结点 while(p) { j++; p=p->next; } return j; } //查找 /*按序号查找*/ List FindKth(int K,List PtrL) { List p=PtrL; int i=1; while(p!=NULL&&i<K) { p=p->next; i++; } if(i==K) return p; /*找到底K个元素,返回指针*/ else return NULL; /*否则返回空指针*/ } /*按值查找*/ List Find(ElementType X,List PtrL) { List p=PtrL; while(p!=NULL&&p->data!=X) p=p->next; return p; } //插入 /*不带头结点*/ List Insert(ElementType X,int i,List PtrL) { List p,s; if(i==1) //新节点插在表头 { s=(List)malloc(sizeof(struct LNode)); s->data=X; s->next=PtrL; return s; } p=FindKth(i-1,PtrL); if(p==NULL){ cout<<"参数i错"<<endl; return NULL; }else{ s=(List)malloc(sizeof(struct LNode)); s->data=X; s->next=p->next; //新结点插在第i-1个结点后面 p->next=s; return PtrL; } } //删除 /*不带头结点*/ List Delete(int i,List PtrL) { List p,s; if(i==1){ //若要删除的是第一个结点 s=PtrL; if(PtrL==NULL) return NULL; else PtrL=PtrL->next; free(s); return PtrL; } p=FindKth(i-1,PtrL); //查找第i-1个结点 if(p==NULL){ cout<<"第i-1个结点不存在"<<dec<<i-1<<endl; return NULL; }else if(p->next==NULL){ cout<<"第i个结点不存在"<<dec<<i<<endl; return NULL; }else{ s=p->next; //s指向第i个结点 p->next=s->next; //删除结点 free(s); //释放被删除结点 return PtrL; } } //例子 int main() { 9c78 return 0; }
相关文章推荐
- (2) JAVA:线性表的顺序存储与链式存储
- 数据结构与算法(二)-线性表之单链表顺序存储和链式存储
- 线性表的 顺序存储 与 链式存储 的区别与特点
- 线性表顺序存储与链式存储的比较
- 数据结构2----线性表顺序存储和链式存储的实现(霜之小刀)
- 线性结构的顺序存储和链式存储的实现代码(一)
- 算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)
- 线性表(顺序存储/链式存储)
- 线性表的顺序存储和链式存储差异
- 线性结构-栈的顺序存储和链式存储实现
- 线性表的顺序存储和链式存储实现
- 线性表中顺序存储和链式存储
- 线性表的顺序存储和链式存储的实现(C)
- 【线性表】顺序存储、链式存储的实现及操作
- 线性表的顺序存储和链式存储的实现(C)
- 线性表的顺序存储和链式存储的实现(C)
- 数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)
- 线性表的顺序存储和链式存储
- 数据结构——线性表的伪链表存储(顺序存储链式遍历)
- 线性结构的顺序存储和链式存储的实现代码(二)