【数据结构】线性表的顺序存储完整程序

来源:互联网 发布:错生网络剧百度云 编辑:程序博客网 时间:2024/06/06 07:27

数据结构,线性表的顺序存储完整程序

#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<iostream.h>#define LIST_INIT_SIZE 100#define LISTNCREMENT 10typedef struct  {    int *elem;    int length;    int listsize;}Sqlist;Sqlist InitSList();void DeleteSList(Sqlist &L,int i);void InsertSList(Sqlist &L,int i,int e);void FindList(Sqlist L,int i);void InverseList(Sqlist L);void Print(Sqlist L);void main(){    int i;     Sqlist L;    L=InitSList();    L.length=5;    for(i=0;i<L.length;i++)        L.elem[i]=i;    printf("original list:\n");     Print(L);//  printf("请输入表长: \n");//  scanf("%d",&L.length);//  printf("表中的元素是:\n");//  for(i=0;i<L.length;i++)//      scanf("%d",&L.elem[i]);    cout<<"~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~"<<endl;    cout<<"请选择:\n";    cout<<"1.插入元素:\n";    cout<<"2.删除元素:\n";    cout<<"3.查找元素:\n";    cout<<"4.顺序表逆置:\n";    int c,n,e;    cin>>c;    switch(c)    {    case 1:        cout<<"请输入插入元素的位置n:\n";        cin>>n;        cout<<"请输入插入的元素n:\n";        cin>>e;        InsertSList( L,n,e);        Print(L);        break;    case 2:        cout<<"请输入删除元素的位置n:\n";        cin>>n;        DeleteSList(L,n);        Print(L);        break;    case 3:        cout<<"请输入查找元素的位置:\n";        cin>>n;        FindList(L,n);        break;    case 4:        InverseList(L);        break;    default:        printf("ERROR");            }//  DeleteSList(L,2);//  Print(L);/// InsertSList( L,2,88);//  Print(L);//  FindList(L,4);//  InverseList(L);}/***********创建顺序表**********/Sqlist InitSList(){    Sqlist L;    L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));    if(!L.elem)        exit(0);    L.length=0;    L.listsize=LIST_INIT_SIZE;    return L;}/***************删除元素************/void DeleteSList(Sqlist &L,int i){    int *p,*q;    if((i<1)||(i>L.length))        printf("ERROR");    p=&(L.elem[i-1]);    q=L.elem+L.length-1;    for(++p;p<=q;++p)        *(p-1)=*p;    L.length--;}/**************插入元素*************************/void InsertSList(Sqlist &L,int i,int e){    int *newbase;    int *q,*p;    if(i<1||i>L.length+1)        printf("ERROR");    if(L.length>=L.listsize)    {        newbase=(int *)realloc(L.elem,(L.listsize+LISTNCREMENT)*sizeof(int));        if(!newbase)            exit(0);        L.elem=newbase;        L.listsize+=LISTNCREMENT;    }    q=&(L.elem[i-1]);    for(p=&(L.elem[L.length-1]);q<=p;p--)    {        *(p+1)=*p;    }    *q=e;    L.length++;}/*************查找元素********************/void FindList(Sqlist L,int i){    int *p,e;//  printf("请输入查找元素的位置:\n");//  scanf("%d",&i);    p=&(L.elem[i-1]);    e=*p;    printf("请输出该位置的元素:\n");    printf("%d",e);    printf("\n");}/*********************顺序表逆置******************************/void InverseList(Sqlist L){    int s,i;    for(i=0;i<L.length/2;i++)    {        s=L.elem[i];        L.elem[i]=L.elem[L.length-i-1];        L.elem[L.length-i-1]=s;    }    cout<<endl;    printf("新的顺序表中的元素是:\n");    for(i=0;i<L.length;i++)    {   printf("%d",L.elem[i]);       printf(" ") ;// cout<<" ~ " ; //有问题,printf和cout混用    }}void Print(Sqlist L){    for(int i=0;i<L.length;i++)    {           printf("%d",L.elem[i]);         printf("  ");    }    printf("\n");  }
0 0