數(shù)據(jù)結(jié)構(gòu)(1)——順序表的實(shí)現(xiàn)

該程序?qū)崿F(xiàn)了以下的功能:
建立順序表,輸入輸入表的大小,順序表的大小不超過100
遍歷順序表,將順序表中的數(shù)據(jù)展示出來
插入數(shù)據(jù),可以根據(jù)位置插入
刪除數(shù)據(jù),根據(jù)位置刪除, 或刪除指定數(shù)據(jù)
查找數(shù)據(jù),根據(jù)位置查找,或查找指定的數(shù)據(jù)
退出
具體代碼如下
//順序表
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MaxSize 100
typedef int DataType;
typedef struct{
DataType list[MaxSize];//定義數(shù)組
int size;//定義類型的大小
}S;//將該數(shù)據(jù)結(jié)構(gòu)命名為S
//初始化順序列表
void ListInit(S *L){//類似于 int *a,為數(shù)據(jù)結(jié)構(gòu)生成一個(gè)指針
L->size=0;//初始化,順序列表的大小為0
}
//創(chuàng)建一個(gè)順序表,里面賦值
void CreatList(S *L,DataType a[],int size){
//需要將創(chuàng)建的表傳進(jìn),有值的數(shù)組,表的大小
int i;
for(i=0;i<size;i++){
L->list[i]=a[i];//將數(shù)組a中的數(shù)據(jù)賦值到表中
L->size++;//計(jì)算表的大小
}
}
//計(jì)算表的長度
int Length(S *L){
return L->size;
}
//查找某數(shù),是否存在于該表中,并輸出位置
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;
}
//查找某位置上的數(shù)
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;
}
}
//刪除,刪除特定位置上的數(shù)
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;//刪除成功
}
//刪除特定的數(shù)值
int DeleteSum(S *L,DataType sum){
int i,flag;
flag=Find(L,sum);//查找數(shù)的位置
if(flag){
Delete(L,flag);//刪除特定位置上的數(shù)
}else{
return 0;//該數(shù)值不存在
}
}
//刪除全部
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");
}
//創(chuàng)建順序表界面
S InterfaceCreate(S *L){
printf("請輸入大?。?quot;);
int size;
scanf("%d",&size);
printf("請輸入具體數(shù):");
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("請輸入插入的數(shù)");
scanf("%d",&sum);
InsertLocation(L,a,sum);
return *L;
}
//刪除的界面
S InterfaceDelete(S *L){
printf("******************************\n");
printf("***1----------刪除特定位置****\n");
printf("***2----------刪除特定數(shù)值****\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("請輸入數(shù)值");
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----------查找特定數(shù)值****\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("請輸入數(shù)值");
DataType sum;
scanf("%d",&sum);
Find(L,sum);
break;
}
case 3: return *L;
}
}
}
//主界面
void Interface(){
printf("******************************\n");
printf("***1----------創(chuàng)建順序表******\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;
}