数据结构——线性表—— 2016_10_13

来源:互联网 发布:云计算大会ppt 编辑:程序博客网 时间:2024/05/29 03:37

                                                                      

                                                                   数据结构之线性表(C语言版)


#include<stdio.h>  #include<stdlib.h>  #define List_Init_Size 100  #define LISTINCREMENT 10  //定义线性表结构  typedef struct{      int *elem;      int length;      int Listsize;  }Sqlist;  //初始化线性  void InitList_sq(Sqlist  *L){      (*L).elem=(int *)malloc(List_Init_Size*sizeof(int));      if(!(*L).elem)          exit(0);      (*L).length=0;      (*L).Listsize=List_Init_Size;        }  //插入线性表  void ListInsert_sq(Sqlist * L,int i,int e){      int *newbase;      int *p,*q;       if( i<1||i>(*L).length+1)           exit(0);       if((*L).length>=(*L).Listsize){   //注意:此处的>=是严蔚敏书上说的。其实==也行,因为length是递增的。我在VC++6.0上实验通过。           newbase=(int *)realloc((*L).elem,((*L).Listsize+LISTINCREMENT)*sizeof(int));           if(!(*L).elem)                printf("meiyou\n");           (*L).elem=newbase;            (*L).Listsize+=LISTINCREMENT;       }       q=&((*L).elem[i-1]);       for(p=&((*L).elem[(*L).length-1]);p>=q;p--)           *(p+1)=*p;       *q=e;       (*L).length++;    }  //删除节点  void Listdel_sq(Sqlist *L,int i){        int *q,*p;        if((i<1)||(i>(*L).length))            exit(0);        q=&((*L).elem[i-1]);        for(p=&((*L).elem[(*L).length-1]);q<=p;q++)            *(q)=*(q+1);        (*L).length--;  }  //打印线性表  void Listprint_sq(Sqlist * L){      int i;       for(i=1;i<=(*L).length;i++)       { printf("%d    ",(*L).elem[i-1]);           printf("%d\n",&(L->elem[i-1]));  //输出变量地址       }  }  //主函数  int main(){           Sqlist M;     int i,k,x,y;          InitList_sq(&M);     printf("          初始化线性表.......\n");     for(i=1;i<=12;i++)     ListInsert_sq(&M,i,i);     printf("十二个数字的线性表已经建立\n");     Listprint_sq(&M);     printf("~~~~~~~~~~~请输入序号进行操作:\n");         printf("1:插入      2:删除      3:退出\n");               scanf("%d",&k);     while(k!=3){     switch(k)     {         case 1: printf("请输入要插入元素的位置和值\n");                 scanf("%d%d",&x,&y);                 ListInsert_sq(&M,x,y);                 Listprint_sq(&M);                 break;         case 2:   printf("请输入要删除元素的位置\n");                  scanf("%d",&x);                  Listdel_sq(&M,x);                  Listprint_sq(&M);                  break;         default:                  printf("非法输入\n");     }         printf("~~~~~~~~~~~~~~~~~~~请输入序号进行操作:\n");         printf("1:插入      2:删除      3:退出\n");     scanf("%d",&k);     }     exit(0);     return 0;  } 


程序运行图:




                          联系方式 :xhsgg12302@outlook.com        

                                                                         

                                                                                                                                                                 2016_10_13

0 0
原创粉丝点击