数据结构——线性表—— 2016_10_13
数据结构之线性表(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