/*建立线性表
*/
#include "stdlib.h"
#include "stdio.h"
# define LIST_INIT_SIZE 100
# define LISTINCREMENT 10
typedef struct elem{ //这里顺序表里的元素是结构体变量,实际情况可以加以适当修改
int a;
float b;
}Lineelem, * Pelem;
typedef struct line{
Pelem e;
int length;
int listsize;
}Sqlist;
void initlist(Sqlist * L) //初始化线性表,只是给元素分配存储空间并初始化一些值
{ L->e=(Pelem) malloc(LIST_INIT_SIZE*sizeof(Lineelem));
if (!L->e)
printf("malloc failed!");
else
{L->length=0;
L->listsize=LIST_INIT_SIZE;
}
}
void inputlist(Sqlist * L,int num) //输入线性表元素数值,num指代输入元素数目
{int i;
Pelem ltemp;
initlist(L);
ltemp=L->e;
for(i=0;i<num;i++)
{ printf("请输入两个数值(第一个数为整数,第二个为浮点数<中间用逗号隔开>):");
scanf("%d,%f",&L->e->a,&L->e->b);
(L->e)++;L->length++;
printf("\n");
}
L->e=ltemp;
}
void showlist(Sqlist * L) //显示数据
{Pelem ltemp;
int i;
ltemp=L->e;
for (i=0;i<L->length;i++)
{printf("第%d个顺序点处的元素值是:%d,%f\n",i+1,L->e->a,L->e->b);
(L->e)++;
}
L->e=ltemp;
printf("====================================================\n");
}
int lengthlist(Sqlist * L) //线性表的长度
{int len;
len=L->length;
return len;
}
void insertlist(Sqlist * L,int pos,Pelem pa) //插入数据
{//在顺序线性表L中的第pos位置之前插入新元素pa
//pos的合法取值范围在:1<=pos<=lengthlist(L)+1
Pelem p,q,newbase;
if (pos<1 || pos>L->length+1) printf("input error!");
if (L->length>=L->listsize)
{ newbase=(Pelem) realloc(L->e,(L->listsize+LISTINCREMENT)*sizeof(Lineelem));
if (!newbase) printf("space malloc failed!");
L->e=newbase; //如原来存储空间不够,则重新分配之后的新基地址
L->listsize+=LISTINCREMENT;
}
q=&(L->e[pos-1]); //插入的位置
for(p=&(L->e[L->length-1]);p>=q;--p)
{(p+1)->a=p->a;(p+1)->b=p->b;}
q->a=pa->a;
q->b=pa->b;
++L->length;
}
void deletelist(Sqlist * L,int pos,Pelem pa) //删除数据
{//删除顺序表pos位置的值,并将值返回到pa中去
//i的合法取值范围:1<=i<=lengthlist(L)
Pelem q,p;
if ((pos<1)||(pos>L->length)) printf("input error!");
p=&(L->e[pos-1]);
pa->a=p->a;
pa->b=p->b;
q=L->e+L->length-1;
for(++p;p<=q;++p)
{(p-1)->a=p->a;(p-1)->b=p->b; }
--L->length;
}
void main()
{int leng;
Lineelem b={11,2.4};
Pelem a=&b;
Pelem e=&b;
Sqlist l;
Sqlist * ls=&l;
inputlist(ls,5);
leng=lengthlist(ls);
printf("====================================================\n");
printf("建立顺序表的长度:%d\n",lengthlist(ls));
showlist(ls);
insertlist(ls,3,a);
printf("插入元素之后顺序表的长度:%d\n",lengthlist(ls));
showlist(ls);
deletelist(ls,2,e);
printf("删除元素之后顺序表的长度:%d\n",lengthlist(ls));
showlist(ls);
printf("删除掉的元素值为:%d,%f\n",e->a,e->b);
}