问题描述:
编写一个程序exp2-1.cpp,实现顺序表的各种运算(假设顺序表的元素类型为char),并在此基础上完成如下功能:
(1)初始化顺序表L;
(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)输出顺序表L;
(12)释放顺序表L。
代码:
#include <iostream>
#include<malloc.h>
using namespace std;
typedef struct
{
char data[50];
int length;
}Sqlist;
void InitList(Sqlist *&L)//初始化顺序表
{
L=(Sqlist*)malloc(sizeof(Sqlist));
L->length=0;
}
void DestroyList(Sqlist *&l)//释放顺序表
{
free(l);
}
bool Insert(Sqlist *&L, char n)//尾插法插入元素
{
int i=L->length;
L->data[i]=n;
L->length+=1;
return true;
}
void DispList(Sqlist *L)//输出顺序表
{
int i;
for(i=0;i<L->length;i++)
{
cout<<L->data[i]<<" ";
}
cout<<endl;
}
int ListLength(Sqlist *L)//返回长度
{
return (L->length);
}
bool ListEmpty(Sqlist *L)//判断是否为空
{
return (L->length==0);
}
bool GetElem(Sqlist *L,int i,char &e)//返回相应位置的元素
{
if(i<1||i>L->length)
return false;
e=L->data[i-1];
return true;
}
int GetLocate(Sqlist *L,char e)//返回元素位置
{
int i=0;
while(i<L->length&&L->data[i]!=e)
i++;
if(i>=L->length) return 0;
else return i+1;
}
bool InsertElem(Sqlist *L,int i,char e)//在对应位置插入元素
{
int j=L->length;
if(i<1||i>j+1)
return false;
for(;j>i-1;j--)
L->data[j]=L->data[j-1];
L->data[i-1]=e;
L->length++;
return true;
}
bool ListDelete(Sqlist *&l,int i)//删除相应位置的元素
{
int j;
if(i<1||i>l->length) return false;
i--;
for(j=i;j<l->length;j++)
{
l->data[j]=l->data[j+1];
}
l->length--;
return true;
}
int main()
{
Sqlist *L;
cout<<"1.初始化顺序表L"<<endl;
InitList(L);
cout<<"2.插入元素a,b,c,d,e"<<endl;
char x='a';
while(x<='e')
{
Insert(L,x);
x++;
}
cout<<"3.输出顺序表:";
DispList(L);
int l=ListLength(L);
cout<<"4.顺序表长度:"<<l<<endl;
if(ListEmpty(L))
{
cout<<"5.顺序表为空"<<endl;
}
else
cout<<"5.顺序表不为空"<<endl;
char e;
GetElem(L,3,e);
cout<<"6.第3个元素为:"<<e<<endl;
int n=GetLocate(L,'a');
cout<<"7.元素a的位置为:"<<n<<endl;
InsertElem(L,4,'f');
cout<<"8.插入f"<<endl;
cout<<"9.输出顺序表L:";
DispList(L);
ListDelete(L,3);
cout<<"10.删除第3个元素"<<endl;
cout<<"11.输出顺序表L:";
DispList(L);
cout<<"12.释放顺序表L"<<endl;
DestroyList(L);
return 0;
}
运行结果: