欢迎光临散文网 会员登陆 & 注册

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

2018-07-23 20:56 作者:啷个里格朗郎郎  | 我要投稿

该程序实现了以下的功能:

  1. 建立顺序表,输入输入表的大小,顺序表的大小不超过100

  2. 遍历顺序表,将顺序表中的数据展示出来

  3.  插入数据,可以根据位置插入

  4. 删除数据,根据位置删除, 或删除指定数据

  5. 查找数据,根据位置查找,或查找指定的数据

  6. 退出

具体代码如下

//顺序表 

#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;


数据结构(1)——顺序表的实现的评论 (共 条)

分享到微博请遵守国家法律