#include <iostream>
using namespace std;
#define Listsize 100 //表空间的大小可根据实际需要而定,这里假设为100
typedef int DataType; //DataType的类型可根据实际情况而定,这里假设为int
typedef struct
{
DataType data[Listsize];
int len; //当前的表长度
}SeqList;
//初始化线性表
int init_list(SeqList * sl)
{
sl->len=0;
return 1;
}
//插入元素
int insert_list(SeqList * sl,int i,int x)
{
if(i<1 || i>sl->len+1)
{
cout<<"插入位置错误!"<<endl;
return 0;
}
for(int j=sl->len+1;j>i;j--) //将序号为i的结点及之后的结点后移
sl->data[j]=sl->data[j-1];
sl->data[i]=x; //在序号i处放入x
sl->len++; //线性表的长度增加1
return 1;
}
//输出元素
void display_list(SeqList * sl)
{
if(sl->len==0)
cout<<"is empty!"<<endl;
else
{
int i=1;
for(; i<=sl->len; i++)
cout<<sl->data[i]<<" ";
}
}
//删除元素
void delete_list(SeqList * sl, int i)
{
if(i<1 || i>sl->len)
{
cout<<endl<<"删除位置不合理!";
}
else
{
for(int j=i;j<sl->len;j++)
sl->data[j]=sl->data[j+1];
sl->len--;
}
}
//查找元素
int locate_list(SeqList * sl,int i)
{
for(int j=1;j<=sl->len;j++)
if(sl->data[j]==i)
return j;
return 0;
}
//置线性表空
void clear_list(SeqList * sl)
{
sl->len=0;
cout<<"置空成功!"<<endl;
}
//逆置线性表
void lizhi_list(SeqList * sl)
{
int j=sl->len;
for(int i=1;i<=sl->len/2;i++,j--)
{
int temp=sl->data[i];
sl->data[i]=sl->data[j];
sl->data[j]=temp;
}
}
int main()
{
SeqList * sl;
sl=(SeqList *)malloc(sizeof(SeqList));
if(!sl)
{
printf("分配空间失败!\n");
return 0;
}
//初始化线性表
init_list(sl);
//插入元素
insert_list(sl,1,10);
insert_list(sl,2,8);
insert_list(sl,3,13);
insert_list(sl,4,25);
insert_list(sl,5,37);
insert_list(sl,6,9);
insert_list(sl,7,65);
//输出元素
display_list(sl);
cout<<endl;
//再插入元素
insert_list(sl,2,39);
insert_list(sl,5,88);
insert_list(sl,10,97);
//输出元素
display_list(sl);
cout<<endl;
//删除元素
delete_list(sl,1);
delete_list(sl,2);
delete_list(sl,6);
//输出元素
display_list(sl);
delete_list(sl,10);
//查找元素
cout<<endl<<"您要找的元素的位置: ";
if(int t=locate_list(sl,2))
cout<<t<<endl;
else
cout<<"cann't found!"<<endl;
//逆置线性表
cout<<"线性表长度:";
cout<<sl->len<<endl;
lizhi_list(sl);
display_list(sl);
//置线性表空
cout<<endl<<"将表置空? ";
clear_list(sl);
display_list(sl);
return 0;
}