线性表的顺序存储结构,顺序表基本运算的实现
#include<stdio.h> //输入输出头文件
#include<stdlib.h> //malloc和free都在这个头文件里
#define MaxSize 50
typedef struct
{
int date[MaxSize]; //存放线性表中的元素,为了简便设置成整型
int length; //存放线性表的长度
}SqList; //顺序表类型
int main()
{
int a[10];
int i,n,p;
for(i=0;i<10;i++)
a[i]=i;
SqList *L;
int e1,e2,e3,e4;
bool qwe1,qwe2,qwe3,qwe4; //定义几个布尔型变量给后面用
/***************定义函数类型**************/
void CreateList(SqList *&L,int a[],int n);
void InitList(SqList * &L);
void Destroy(SqList * &L);
bool Listkong(SqList * &L);
int ListLength(SqList * &L);
void DispList(SqList* L);
bool GetElem(SqList * &L,int i,int &e);
int Locate(SqList * &L,int e);
bool Deleteen(SqList * &L,int i,int &e);
bool charu(SqList * &L,int i,int e);
InitList(L); //初始化
printf("请输入要创建的元素个数:\n");
scanf("%d",&n); //不能超过10,因为我定义的数组大小为10
CreateList(L,a,n); //创建线性表
printf("请输入:\n");
printf(" 1,销毁线性表;\n 2,判断线性表是否为空表;\n 3,求线性表的长度;\n 4,输出线性表;\n 5.通过元素值序号求线性表的某个元素;\n 6.通过元素值查找元素值序号;\n 7,插入数据元素;\n 8,删除数据元素;\n 9,退出\n");
while(1)//一直循环输入,直到主动退出
{
scanf("%d",&p); //输入想要使用的函数序号
switch(p)
{
case 1:
Destroy(L);
printf("销毁成功\n");
break;
case 2:
qwe1=Listkong(L);
if(qwe1==true)
printf("空\n");
else
printf("不是空\n");
break;
case 3:
printf("%d\n",ListLength(L));
break;
case 4:
DispList(L);
break;
case 5:
printf("请输入要查询的元素值序号:\n");
scanf("%d",&i);
qwe2=GetElem(L,i,e1);
if(qwe2==true)
printf("%d \n",e1);
else
printf("没有这个元素\n");
break;
case 6:
printf("请输入想要查询序号的元素值:\n");
scanf("%d",&e2);
printf("%d\n",Locate(L,e2));
break;
case 7:
printf("请输入要插入元素值的序号:\n");
scanf("%d",&i);
printf("请输入要插入的元素值:\n");
scanf("%d",&e3);
qwe3=charu(L,i,e3);
if(qwe3==true)
printf("插入成功!\n");
else
printf("插入失败!\n");
break;
case 8:
printf("请输入想要删除的元素值序号:\n");
scanf("%d",&i);
qwe4=Deleteen(L,i,e4);
if (qwe4==true)
printf("删除成功!\n");
else
printf("删除失败!\n");
break;
case 9:
exit(0);
default:
printf("输入错误:");
}
}
return 0;
}
/******************************建立顺序表**************************/
void CreateList(SqList * &L,int a[],int n)//由a中的n个元素建立顺序表
{
int i=0,k=0;//k表示L中的元素个数,初始化为0
L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
while (i<n)
{
L->date[k]=a[i];//将元素a[i]存放到L中
k++;i++;
}
L->length=k;//设置L的长度k
}
/***************************初始化线性表**************************/
void InitList(SqList * &L)
{
L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
L->length=0;//置空线性表的长度为0
}
/************************************销毁线性表**************/
void Destroy(SqList * &L)
{
free(L);//释放L所指的顺序表空间
}
/*******************判断线性表是否为空表******************/
bool Listkong(SqList * &L)
{
return(L->length==0);
}
/*********************求线性表的长度**********************/
int ListLength(SqList * &L)
{
return(L->length);
}
/**************************输出线性表******************************/
void DispList(SqList* L)
{
//int i;
for (int i=0;i<L->length;i++)
printf("%d ",L->date[i]);
printf("\n");
}
/****************************求线性表中的某个数据元素值********************/
bool GetElem(SqList * &L,int i,int &e)
{
if (i<1||i>L->length)
{
return false;//参数错误时返回false
}
e=L->date[i-1]; //取元素值
return true; //成功找到元素时返回true
}
/*****************按元素值查找*******************/
int Locate(SqList * &L,int e)
{
int i=0;
while (i<L->length&&L->date[i]!=e)
{
i++;
}
if (i>=L->length)
{
return 0;
}
else
return i+1;
}
/***********插入数据元素*************/
bool charu(SqList * &L,int i,int e)
{
int j;
if (i<1||i>L->length+1)
{
return false;
}
i--;
for (j=L->length;j>i;j--)
{
L->date[j]=L->date[j-1];
}
L->date[i]=e;
L->length++;
return true;
}
/*************删除数据元素**************/
bool Deleteen(SqList * &L,int i,int &e)
{
int j;
if(i<1||i>L->length)
return false;
i--;
e=L->date[i];
for (j=i;j<L->length-1;j++)
{
L->date[j]=L->date[j+1];
}
L->length--;
return true;
}