中南大学数据结构实验报告1(线性表)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; }