v1.0 可编辑可修改 计算机系数据结构实验报告(1)
实验目的:
帮助学生掌握线性表的基本操作在顺序和链表这两种存储结构上的实现,尤以链表的
操作和应用作为重点。
问题描述:
1、 构造一个空的线性表L。
2、 在线性表L的第i个元素之前插入新的元素e; 3、 在线性表L中删除第i个元素,并用e返回其值。
实验要求:
1、 分别利用顺序和链表存储结构实现线性表的存储,并设计出在不同的存储结构中线
性表的基本操作算法。
2、 在实验过程中,对相同的操作在不同的存储结构下的时间复杂度和空间复杂度进行
分析。
算法分析:
由于两种存储结构都用来创建线性结构的数据表,可采用相同的输出模式和整体结构类似的算法,如下:
- 1 -
v1.0 可编辑可修改
实验内容和过程:
顺序存储结构线性表程序清单: //顺序存储结构线性表的插入删除 #include
using namespace std;
# define LISTSIZE 100 # define CREMENTSIZE 10
typedef char ElemType; //定义数据元素类型为字符型 typedef struct {
//构造一个空的线性表L
- 2 -
ElemType *elem; //数据元素首地址 int len;
//当前元素个数 //当前存储最大容量
int listsize;
}SqList;
v1.0 可编辑可修改 int InitList(SqList &L) {
=(ElemType *)malloc(LISTSIZE*sizeof(ElemType)); }
//在顺序线性表L中第i个位置之前插入新的元素e int ListInsert(SqList &L,int i,ElemType e) {
if (i<1||i>+1) return -1; //i值不合法 if >= {
ElemType *newelem=(ElemType *)realloc,+CREMENTSIZE)*sizeof(ElemType)); //存储空间已满,增加分配
if(!newelem) exit (-2); //分配失败 =newelem;
+=CREMENTSIZE; }
if (! exit(-2); //分配空间失败 =0; =LISTSIZE;
ElemType *q=&[i-1]) ;
for (ElemType *p=&[]);p>=q;--p) *(p+1)=*p; //插入位置及其后的元素后移 *q=e; ++; }
//在顺序线性表L中删除第i个元素,并用e返回其值 int ListDelete(SqList &L,int i,ElemType&e) {
if (i<1||i> return -1; //i值不合法 ElemType *p=&[i-1]); e=*p; ElemType*q=+;
for (++p;p<=q+1;++p) *(p-1)=*p; //被删除元素之后的元素前移 ; return 1;
- 3 -
return 1;
v1.0 可编辑可修改 }
int main () {
SqList L; char e,ch; int i,j,state;
InitList(L); //构造线性表
printf(\请输入原始数据(字符串个数0~99):L=\ //数据初始化 gets; for ( j=1;[j-1]!='\\0';j++) =j; //获取表长 [j]='\\0';
printf(\操作:插入(I)还是删除(D)\\n\判断进行插入还是删除操作
AGAIN: cin>>ch;
if(ch=='I') {
cout<<\插在第几个元素之前:\插入操作 cin>>i; cout<<\输入要插入的新元素:\
cin>>e; cout< printf(\输入数据:L=(%s) ListInsert(L,%d,%c)\ state=ListInsert (L,i,e); } else if (ch=='D') { cout<<\删除第几个元素:\删除操作 cin>>i; cout< DeleteList(L,%d,e)\ printf(\输入数据:L=(%s) state=ListDelete(L,i,e); } else goto AGAIN; //操作指示符输入错误处理 cout< printf(\输出结果 - 4 - v1.0 可编辑可修改 } if(ch=='D'&&state!=-1) cout<<\ 链式存储结构线性表程序清单: // - - - - -单链存储结构线性表的插入删除 - - - - - #include using namespace std; #define null 0 typedef char ElemType; //定义数据元素类型为字符型 typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; int GetElem(LinkList L,int i,ElemType &e) //获取第i个元素的值 { LinkList p;int j; p=L->next; j=1; while(p&&j p=p->next; ++j; //寻找第i个元素 } if(!p||j>i) return -1; //寻找失败 e=p->data; int ListInsert(LinkList &L,int i,ElemType e) { //在带头结点的单链线性表L中第i个元素之前插入元素e return 1; } LinkList p,s; int j; p=L;j=0; - 5 -
数据结构实验(1)线性表及其应用



