#include<iostream>
#include<malloc.h>
using namespace std;
//顺序表存储空间的总分配量
#define MAXSIZE 100
#define FALSE 0
#define TRUE 1
//顺序存储类型
typedef struct
{
char data[100]; //存放线性表的数组
int length; //length为顺序表的长度
}SqList;
//初始化顺序表
void SqListInit(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
//插入元素
void CreateList(SqList *&L,char a[],int n)
{
int i;
L=(SqList *)malloc(sizeof(SqList));
for(i=0;i<n;i++) //把数组里的元素放入顺序表
L->data[i]=a[i];
L->length=n;
}
//输出顺序表L
int DispList(SqList *L)
{
int i;
for(i=0;i<L->length;i++)
{
cout<<L->data[i]<<" ";
}
cout<<endl;
return 0;
}
//输出线性表L的长度
int ListLength(SqList *L)
{
cout<<"list's length is "<<L->length<<endl;
return 0;
}
//判断顺序表L是否为空
int ListEmpty(SqList *L)
{
if (L->length==0)
cout<<"List is empty!"<<endl;
else
cout<<"List is not empty."<<endl;
return 0;
}
//输出顺序表L的第三个元素
int GetElem(SqList *L,char e)
{
e=L->data[2];
cout<<"the third number is "<<e<<endl;
return 0;
}
//输出元素a的位置
int LocateElem(SqList *L)
{
int i=0;
char a='a';
while(i<L->length&&L->data[i]!=a)
{
i++;
if(i>=L->length)
cout<<"error"<<endl;
}
cout<<"a is the "<<i+1<<" number."<<endl;
return 0;
}
//在第四个元素位置上插入元素f
char ListInsert(SqList *&L,int i,char f)
{
int j;
i--;
for(j=L->length;j>i;j--) //插入元素及以后位置均向后移
{
L->data[j]=L->data[j-1];
}
L->data[i]=f;
L->length++;
cout << "Insert done."<<endl;
return 0;
}
//删除L的第三个元素
char ListDelete(SqList *&L,int i)
{
int j;
for(j=i;j<L->length;j++) //删除元素及以后均向前移一个位置
L->data[j-1] = L->data [j];
L->length--;
cout << "delete done"<<endl;
return 0;
}
//释放顺序表L
void DistorySq(SqList *&L)
{
delete(L);
}
int main()
{
SqList *L;
int n,i=4;
char e = ' ';
char f='f';
char ary[5]={'a','b','c','d','e'};
cout<<"~~ 第一次操作需先进行初始化 ~~"<<endl;
cout<<" 请选择以下操作:"<<endl;
cout<<"1、初始化顺序表 "<<endl;
cout<<"2、插入元素"<<endl;
cout<<"3、输出链表中的元素"<<endl;
cout<<"4、输出链表的长度"<<endl;
cout<<"5、判断链表是否为空 "<<endl;
cout<<"6、输出单链表的第三个元素"<<endl;
cout<<"7、输出第一个值为a的元素的位置 "<<endl;
cout<<"8、在第四个元素位置上插入f"<<endl;
cout<<"9、删除第三个元素"<<endl;
cout<<"10、释放链表"<<endl;
cout<<"按其它键退出"<<endl;
while(cin>>n)
{
switch(n)
{
case 1:
SqListInit(L);
cout<<"You can continue."<<endl;break;
case 2:
CreateList(L,ary,5);
cout<<"List have been created."<<endl;break;
case 3:
DispList(L);break;
case 4:
ListLength(L);break;
case 5:
ListEmpty(L);break;
case 6:
GetElem(L,e);break;
case 7:
LocateElem(L);break;
case 8:
ListInsert(L,4,f);break;
case 9:
ListDelete(L,3);break;
case 10:
DistorySq(L);break;
default:
exit(0);
}
}
return 0;
}