中南大学数据结构实验报告1(线性表)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一线性表的操作算法

一、实验目的:

1了解线性表的逻辑结构和存储结构,以及定义在逻辑结构上的各种基本运算2分别以数组和链表为存储结构,实现线性表的插入,删除,查找,排序,合并等操作

二、实验内容:

用C/C++语言编写程序,分别以数组和链表为存储结构,完成以下功能:

1输入数据,创建一个线性表

2可在线性表的任意位置插入新结点

3可删除线性表的任意一个结点

4可在线性表中查找结点

5将线性表从小至大排序

6将两个线性表合并

三、详细设计:

顺序表

#include

using namespace std;

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef int Status;

typedef int ElemType;

#define LIST_INIT_SIZE 100

#define LISTINCREMENT 10

typedef struct { //结构体

ElemType *elem;

int length;

int listsize;

}SqList;

SqList Lx;

Status InitList_Sq(SqList &L) //分配空间

{ L.elem=new ElemType[LIST_INIT_SIZE];

if(!L.elem)exit(OVERFLOW);

L.length =0;

L.listsize=LIST_INIT_SIZE;

return OK;

}

Status ListInsert(SqList &L,int i,ElemType e) //插入新元素{ int *q,*p;ElemType *newbase;

if(i<1 || i>L.length+1) return ERROR;

if(L.length>=L.listsize)

{ newbase=new ElemType[L.listsize+LISTINCREMENT];

if(!newbase) exit(OVERFLOW);

L.elem=newbase;

L.listsize+=LISTINCREMENT;

}

q=&(L.elem[i-1]);

for (p=&(L.elem[L.length-1]);p>=q;--p)

*(p+1)=*p;

*q=e;

++L.length;

return OK;

}

Status Listlength(SqList L) //长度

{ int *p=L.elem; //判断线形表是否存在while(p)

{ return (L.length); }

}

Status GetElem(SqList L, int i,ElemType &e) //取元素

{ if(i<1 || i>L.length)

return ERROR;

else

{ e=L.elem[i-1];

return e;

}

}

void MergeList(SqList La,SqList Lb,SqList &Lc) //合并

{ ElemType ai,bj;

InitList_Sq(Lc);

int i=1,j=1,k=0;

int La_len,Lb_len;

La_len=Listlength(La);

Lb_len=Listlength(Lb);

while((i<=La_len)&&(j<=Lb_len))

{ GetElem(La,i,ai);GetElem(Lb,j,bj);

if(ai<=bj)

{ ListInsert(Lc,++k,ai);++i; }

else

{ ListInsert(Lc,++k,bj);++j; }

}

while(i<=La_len)

{ GetElem(La,i++,ai);

ListInsert(Lc,++k,ai);

}

while(j<=Lb_len)

{ GetElem(Lb,j++,bj);

ListInsert(Lc,++k,bj);

}

}

void show(SqList L,int i) //显示

{ int j;ElemType k;

cout<<"顺序表显示如下:"<

for(j=0;j

{ k=L.elem[j];

cout<"; }

if(j==i-1 && i>0)

{ k=L.elem[j]; cout<

cout<

}

void create(SqList &L,int n) //输入元素{ int e;

for(int i=0;i

{ cin>>e;

L.elem[i]=e;

L.length=i+1; }

}

Status ListDelete_Sq(SqList &L,int i,ElemType &e) //删除{ ElemType *p, *q;

if(i<1 || i>L.length) return ERROR;

p=&(L.elem[i-1]);

e=*p;

q=L.elem+L.length-1;

for(++p;p<=q;++p) *(p-1)=*p;

--L.length;

return OK;

}

相关文档
最新文档