数据结构实验--顺序表
/*实现顺序表的各种基本运算;并在此基础上设计一个主程序,完成如下功能:
(1) 初始化顺序表L(元素类型为char型)(2) 依次采用尾插法插入a, b, c, d, e元素
(3) 输出顺序表L
(4) 输出顺序表L的长度
(5) 判断顺序表L是否为空
(6) 输出顺序表L的第3个元素
(7) 输出元素'a' 的位置
(8) 在第4个元素位置上插入'f'元素
(9) 输出顺序表L
(10) 删除顺序表L的第3个元素
(11) 输出顺序表
(12) 释放顺序表
*/
#include <iostream>
#include <stdlib.h>
using namespace std;
#define MaxSize 100
typedef char ElemType;
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;
void InitList(SqList *&L){ //初始化顺序表
L=(SqList*)malloc(sizeof(SqList));
L->length=0;
}
void CreateList(SqList *&L,ElemType a[],int n){ //利用尾插法插入元素
int i;
for(i=0;i<n;i++)
L->data[i]=a[i];
L->length = n;
}
int ListLength(SqList *L){ //求线性表长度
return (L->length);
}
void Display(SqList *L){ //输出线性表元素
int i;
for(i=0;i<L->length;i++)
cout<<L->data[i]<<" ";
cout<<endl;
}
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;
}
int LocateElem(SqList *L,ElemType e){ //查找元素位置
int i=0;
while(i<L->length&&L->data[i]!=e)
i++;
if(i>L->length)
return 0;
else return i+1;
}
bool ListDelete(SqList *&L,int i){ //删除顺序表元素
int j;
if(i<1||i>L->length)
return false;
for(j=i-1;j<L->length;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
void DestroyList(SqList *&L){ //销毁线性表
free(L);
}
int main(){
SqList *L;
char a[]={'a','b','c','d','e'};
InitList(L);
CreateList(L,a,5);
cout<<"befor Create: "<<ListLength(L)<<endl;
Display(L);
if(ListLength(L)>0)
cout<<"线性表不为空"<<endl;
else cout<<"线性表为空"<<endl;
cout<<L->data[3-1]<<endl;;
cout<<LocateElem(L,'a')<<endl;
ListInsert(L,4,'f');
Display(L);
cout<<"afterInsert: "<<ListLength(L)<<endl;
ListDelete(L,3);
cout<<"afterDelete: ";
Display(L);
DestroyList(L);
return 0;
}