顺序表:是采用顺序储存结构存放的线性表,用一组地址连续的储存单元依次存储线性表中的各个数据元素,使得线性表中在逻辑结构上相邻的数据元素存储在连续的物理存储单元中。
通过此程序可以实现顺序表初始化,顺序表创建,顺序表插入元素,顺序表删除元素,判断顺序表是否为空,顺序表查找元素,求顺序表长度,顺序表输出操作。
以下为代码:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MAXSIZE 100
#define OK 1
#define Error 0
int yes=0;
typedef struct
{
int elem[MAXSIZE];
int length;
}Seqlist;//分配一个动态一维数组来表示线性表
void menu()//建立一个菜单,显示页面
{
printf("\t\t顺序表基本操作实验\t\t\n");
printf("*****************************************\n");
printf("*请选择命令序号(0-7):\t\t\t*\n");
printf("*1 创建顺序表:\t\t\t\t*\n");
printf("*2 顺序表输入:\t\t\t\t*\n");
printf("*3 顺序表删除:\t\t\t\t*\n");
printf("*4 求顺序表长度:\t\t\t*\n");
printf("*5 判断顺序表是否为空:\t\t\t*\n");
printf("*6 顺序表元素查找:\t\t\t*\n");
printf("*7 顺序表输出:\t\t\t\t*\n");
printf("*0 程序结束\t\t\t\t*\n");
printf("*****************************************\n");
}
void Initlist(Seqlist *I)
{
I->length=0;
}
int Creatlist(Seqlist *I)//创建顺序表
{
int i,n;
if(I->length>0)
{
printf("线性表已经存在,不需要再创建!\n");
return Error;
}
printf("请输入顺序表长度:\n");
scanf("%d",&n);
printf("请输入顺序表的元素(整形数):\n");
for(i=0;i<n;i++)
scanf("%d",&(I->elem[i]));
I->length=n;
yes=1;
return OK;
}
int Inslist(Seqlist *I,int i,int e)//插入元素
{
int k;
if(I->length>MAXSIZE)
printf("空间不足,请补充空间!\n");
else
{
for(k=I->length-1;k>=i-1;k--)
I->elem[k+1]=I->elem[k];
I->elem[i-1]=e;
I->length++;
printf("插入成功!\n");
}
return OK;
}
int Delist(Seqlist *I,int i)//删除元素
{
int k;
for(k=i-1;k<I->length-1;k++)
{
I->elem[k]=I->elem[k+1];
I->length--;
printf("删除成功!\n");
}
return OK;
}
int Lengthlist(Seqlist *I)//计算顺序表长度
{
if(yes==0)
{
printf("此时表未创建!因而没有长度!\n");
return Error;
}
else
{
printf("此时线性长度是%d\n",I->length);
return OK;
}
}
void Emptylist(Seqlist *I)//判断是否为空
{
if(!yes)
printf("此时表未创建!不能判断是否为空!\n");
else
{
if(I->length==0)
printf("此时顺序表为空表!\n");
else
printf("此时顺序表为非空表!\n",I->length);
}
}
void Findlist(Seqlist *I,int e)//查找元素
{
int i=0;
while((I->elem[i]!=e)&&(i<I->length))
{
i++;
}
if(i==I->length)
printf("顺序表中不存在这个元素!\n");
else
printf("所查找到的元素位置是第%d个!\n",i+1);
}
void Dislist(Seqlist *I)//输出顺序表
{
int i;
if(I->length==0)
printf("此时顺序表为空表!\n");
else
{
printf("此时线性表是:\n");
for(i=0;i<I->length;i++)
printf("%d\t",I->elem[i]);
printf("\n");
}
}
int main(void)
{
Seqlist L;
int i,sel,e,n;
Initlist(&L);
while(1)
{
menu();
printf("请输入命令号(0-7):\n");
scanf("%d",&sel);
switch(sel)
{
case 1:Creatlist(&L);break;
case 2:if(yes==0)
{
printf("此时表未创建!不能插入元素!\n");break;
}
else
{
printf("请输入要插入的位置:\n");
scanf("%d",&i);
printf("请输入要插入的值:\n");
scanf("%d",&e);
Inslist(&L,i,e);
break;
}
case 3:if(yes==0)
{
printf("此时表未创建!不能删除元素!\n");break;
}
else
{
printf("请输入要删除的位置:\n");
scanf("%d",&i);
Delist(&L,i);
break;
}
case 4:Lengthlist(&L);break;
case 5:Emptylist(&L);break;
case 6:if(yes==0)
{
printf("此时表未创建!不能查找元素!\n");break;
}
else
{
printf("请输入要查找的元素:\n");
scanf("%d",&n);
Findlist(&L,n);
break;
}
case 7:if(yes==0)
{
printf("此时表未创建!不能输出线性表!\n");break;
}
else
{
Dislist(&L);
break;
}
case 0:exit(1);break;
default:
printf("输出命令错误!请重新输入:\n");
break;
}
}
return OK;
}