C语言实现顺序表的基本操作,包括增删查操作以及顺序表的合并
SequentialList.h
#include
#include
#define MAXSIZE 30
typedef int DataType;
//顺序表格式定义
typedef struct
{
DataType Data[MAXSIZE]; //数据域,存放数据
int last; //记录最后顺序表一个元素下标,空表为-1
}SeqList;
//定义三个顺序表LA,LB,LC
SeqList LA,LB,LC;
//判空
int IsEmpty(SeqList L);
//判满
int IsFull(SeqList L);
//初始化顺序表
int InitSeqList(SeqList* L);
//在下标i处插入数据
int InsList(SeqList* L,int i,int e);
//递增按序插入数据
int InsertList(SeqList* L,int e);
//删除下标为i的元素
int DelList(SeqList* L,int i);
//删除数据e
int DeleteList(SeqList* L,int e);
//查找并返回下标为i的元素
int GetData(SeqList L,int i);
//查找变量e并返回下标
int Locate(SeqList L,int e);
//显示L所有数据
int Show(SeqList L);
//合并有序顺序表LA,LB
int MergeList(SeqList* LA,SeqList* LB,SeqList* LC);
//状态判断函数,判断并输出操作的运行状态
int State(int i);
//对顺序表L进行操作
int Operation(SeqList* L);
//主界面
int MainMenu();
SequentialList.c
#include
#include
#include "SequentialList.h"
//初始化顺序表
int InitSeqList(SeqList* L)
{
//将顺序表last值赋为-1,将顺序表置为空表
L->last = -1;
return 0;
}
//在下标i处插入数据
int InsList(SeqList* L,int i,int e)
{
int j;
if(IsFull(*L))
return -1; //表已满,无法插入
if((i < 0)||(i > L->last + 1))
return 0; //插入位置i不合法
if(i == L->last + 1)
{
L->Data[i] = e;
L->last++;
return 1; //插入成功返回1
}
else
{
for(j = L->last;j >= i; j--)
L->Data[j+1] = L->Data[j];
L->Data[i] = e;
L->last++;
return 1; //插入成功返回1
}
}
//按递增顺序插入数据e
int InsertList(SeqList* L,int e)
{
int i;
if(IsEmpty(*L))
{
L->Data[0] = e;
L->last++;
return 1; //插入成功返回1
}
else
{
for(i = 0;i <= L->last; i++ )
{
if(L->Data[i] > e)
break;
}
return InsList(L,i,e);
//在下标i处插入数据并返回其返回值
}
}
//删除下标为i的元素
int DelList(SeqList* L,int i)
{
int j;
if((i < 0)||(i > L->last))
return 0; //删除位置不合法返回0
if(i < L->last)
for(j = i;j < L->last; j++ )
L->Data[j] = L->Data[j+1];
L->last--;
return 1; //删除成功返回1
}
//删除数据e
int DeleteList(SeqList* L,int e)
{
int i = Locate(*L,e);
if(i >= 0)
return DelList(L,i);
return -2;
}
//返回下标为i的数据
int GetData(SeqList L,int i)
{
if((i < 0)||(i > L.last))
return 0; //位置不合法返回0
return L.Data[i]; //操作成功返回1
}
//查找e返回下标
int Locate(SeqList L,int e)
{
int i = 0;
while((i <= L.last)&&(L.Data[i] != e))
i++;
if(i <= L.last)
return i; //找到位置则1
return -1; //未找到返回-2
}
//判空
int IsEmpty(SeqList L)
{
if(L.last == -1)
return 1; //表为空返回1
return 0;
}
//判满
int IsFull(SeqList L)
{
if(L.last == MAXSIZE - 1)
return 1; //表已满返回1
return 0;
}
//显示顺序表中所有元素
int Show(SeqList L)
{
int i;
for(i = 0;i <= L.last; i++)
printf("\t%d. %d\n",i,L.Data[i]);
return 0;
}
//状态判断函数,判断并输出操作的运行状态
int State(int i)
{
if(i == -1)
printf("\t顺序表已满\n");
else if(i == 0)
printf("\t输入位置不合法\n");
else if(i == -2)
printf("\t在顺序表中未找到该数据\n");
else if(i == -3)
printf("\t顺序表为空\n");
else
printf("\t操作成功\n");
return 0;
}
//对顺序表进行操作
int Operation(SeqList* L)
{
int i,e,k,m;
//i操作数,e增删查的数据,k要操作的位置
while(1)
{
system("cls");
printf("\t1.按序插入数据e\n");
printf("\t2.删除第k个数据\n");
printf("\t3.删除数据e\n");
printf("\t4.查找数据e\n");
printf("\t5.显示所有数据\n");
printf("\t0.返回主界面\n");
scanf("%d",&i);
switch(i)
{
case 1:
printf("请输入要插入的数据");
scanf("%d",&e);
State(InsertList(L,e));
system("pause");
break;
case 2:
printf("请输入要删除数据的位置");
scanf("%d",&k);
State(DelList(L,k-1));
system("pause");
break;
case 3:
printf("请输入要删除的数据");
scanf("%d",&e);
State(DeleteList(L,e));
system("pause");
break;
case 4:
printf("请输入要查找的数据");
scanf("%d",&e);
m =Locate(*L,e);
if(m >= 0)
printf("\n%d的下标为%d\n",e,m);
system("pause");
break;
case 5:
Show(*L);
system("pause");
break;
case 0:
return 0;
break;
default:
break;
}
}
}
//合并有序顺序表LA,LB
int MergeList(SeqList* LA,SeqList* LB,SeqList* LC)
{
int i,j,k;
i = j = k = 0;
while((i <= LA->last)&&(j <= LB->last))
if(LA->Data[i] < LB->Data[j])
{
LC->Data[k] = LA->Data[i];
i++;
k++;
}
else
{
LC->Data[k] = LB->Data[j];
j++;
k++;
}
while(i <= LA->last)
{
LC->Data[k] = LA->Data[i];
i++;
k++;
}
while(j <= LB->last)
{
LC->Data[k] = LB->Data[j];
j++;
k++;
}
LC->last = LA->last + LB->last + 1;
return 0;
}
//主界面
int MainMenu()
{
int i;
printf("\t1.对顺序表LA进行操作\n");
printf("\t2.对顺序表LB进行操作\n");
printf("\t3.合并顺序表LA和LB\n");
printf("\t4.查看LC\n");
printf("\t0.退出系统\n");
scanf("%d",&i);
switch(i)
{
case 1:
Operation(&LA);
break;
case 2:
Operation(&LB);
break;
case 3:
MergeList(&LA,&LB,&LC);
break;
case 4:
Show(LC);
break;
case 0:
exit(0);
break;
default:
break;
}
system("pause");
return 0;
}
main.c
#include
#include
#include "SequentialList.h"
int main()
{
InitSeqList(&LA);
InitSeqList(&LB);
InitSeqList(&LC);
while(1)
{
system("cls");
MainMenu();
}
return 0;
}