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