数据结构(1)——顺序表的实现

该程序实现了以下的功能:
建立顺序表,输入输入表的大小,顺序表的大小不超过100
遍历顺序表,将顺序表中的数据展示出来
插入数据,可以根据位置插入
删除数据,根据位置删除, 或删除指定数据
查找数据,根据位置查找,或查找指定的数据
退出
具体代码如下
//顺序表
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MaxSize 100
typedef int DataType;
typedef struct{
DataType list[MaxSize];//定义数组
int size;//定义类型的大小
}S;//将该数据结构命名为S
//初始化顺序列表
void ListInit(S *L){//类似于 int *a,为数据结构生成一个指针
L->size=0;//初始化,顺序列表的大小为0
}
//创建一个顺序表,里面赋值
void CreatList(S *L,DataType a[],int size){
//需要将创建的表传进,有值的数组,表的大小
int i;
for(i=0;i<size;i++){
L->list[i]=a[i];//将数组a中的数据赋值到表中
L->size++;//计算表的大小
}
}
//计算表的长度
int Length(S *L){
return L->size;
}
//查找某数,是否存在于该表中,并输出位置
int Find(S *L,DataType a){
int i;
for(i=0;i<L->size;i++){
if(L->list[i]==a){
printf("it's address:%d",i);
return i;
}
}
printf("can't find it'");
return 0;
}
//查找某位置上的数
int Location(S *L,int a){
printf("%d\n",L->list[a]);
return 0;
}
//插入,在尾部插入,添加
void Add(S *L,DataType sum){
L->size++;
L->list[L->size-1]=sum;
}
//插入,在某位置上插入
int InsertLocation(S *L,int a,DataType sum){
int i;
if(a>L->size||a<0){
printf("The address is wrong\n");
return 0;
}else if(L->size>=MaxSize){
printf("The table is full\n");
return 0;
}else if(a==L->size){
Add(L,sum);
return 0;
}else{
for(i=L->size;i>=a;i--){
L->list[i+1]=L->list[i];
}
L->list[a]=sum;
L->size++;
return 0;
}
}
//删除,删除特定位置上的数
int Delete(S *L,int a){
int i;
if(a<0||a>L->size){
return 0;//位置信息错误
}
for(i=a;i<L->size;i++){
L->list[i]=L->list[i+1];
}
L->size--;
return 1;//删除成功
}
//删除特定的数值
int DeleteSum(S *L,DataType sum){
int i,flag;
flag=Find(L,sum);//查找数的位置
if(flag){
Delete(L,flag);//删除特定位置上的数
}else{
return 0;//该数值不存在
}
}
//删除全部
void DeleteAll(S *L){
ListInit(L);
}
//遍历
void FindAll(S *L){
int i;
for(i=0;i<L->size;i++){
printf("%d",L->list[i]);
}
printf("\n");
}
//创建顺序表界面
S InterfaceCreate(S *L){
printf("请输入大小:");
int size;
scanf("%d",&size);
printf("请输入具体数:");
int i;
int a[size];
for(i=0;i<size;i++){
scanf("%d",&a[i]);
}
ListInit(L);
CreatList(L,a,size);
FindAll(L);
return *L;
}
//插入的界面
S InterfaceInsert(S *L){
int a,sum;
printf("请输入插入的位置");
scanf("%d",&a);
printf("请输入插入的数");
scanf("%d",&sum);
InsertLocation(L,a,sum);
return *L;
}
//删除的界面
S InterfaceDelete(S *L){
printf("******************************\n");
printf("***1----------删除特定位置****\n");
printf("***2----------删除特定数值****\n");
printf("***3----------全部删除********\n");
printf("***4----------退出************\n");
printf("******************************\n");
while (1){
int choice;
printf("请选择:");
scanf("%d",&choice);
switch(choice){
case 1:{
printf("请输入位置:");
int a;
scanf("%d",&a);
Delete(L,a);
break;
}
case 2:{
printf("请输入数值");
DataType sum;
scanf("%d",&sum);
DeleteSum(L,sum);
break;
}
case 3:DeleteAll(L);
case 4: return *L;
}
}
}
//查找的界面
S InterfaceFind(S *L){
printf("******************************\n");
printf("***1----------查找特定位置****\n");
printf("***2----------查找特定数值****\n");
printf("***3----------退出************\n");
printf("******************************\n");
while (1){
int choice;
printf("请选择:");
scanf("%d",&choice);
switch(choice){
case 1:{
printf("请输入位置:");
int a;
scanf("%d",&a);
Location(L,a);
break;
}
case 2:{
printf("请输入数值");
DataType sum;
scanf("%d",&sum);
Find(L,sum);
break;
}
case 3: return *L;
}
}
}
//主界面
void Interface(){
printf("******************************\n");
printf("***1----------创建顺序表******\n");
printf("***2----------遍历************\n");
printf("***3----------插入************\n");
printf("***4----------删除************\n");
printf("***5----------查找************\n");
printf("***6----------退出************\n");
printf("******************************\n");
}
int main(){
S mylist;
while(1){
Interface();
int choice;
printf("请选择:");
scanf("%d",&choice);
switch(choice){
case 1:InterfaceCreate(&mylist);break;
case 2:FindAll(&mylist);break;
case 3:InterfaceInsert(&mylist);break;
case 4:InterfaceDelete(&mylist);break;
case 5:InterfaceFind(&mylist);break;
case 6:exit(1);
}
}
system("pause");
return 0;
}