/* sqlist,对顺序表的各种操作*/
#include "stdio.h"
#include "conio.h"
#include "malloc.h"
#define maxsize 30
typedef struct /*define node*/
{
int *elem ;
int length;
}sqlist;
int init(sqlist *q){ /*init the sqlist*/
q->elem=(int *)malloc(maxsize*sizeof(int)); /*初始化一下数组的大小为30个整型*/
if(!q->elem) /*q->elem is null*/
return 1;
q->length=0;
return 0;
}
int prin(sqlist *q) /*把数据送入顺序表,并输出*/
{
int i,j;
i=0;
scanf("%d",&j);
while(i<maxsize&&j!=-1)
{
q->elem[i]=j;
(q->length)++;
i++ ;
scanf("%d",&j);
}
return 0;
}
int prinf(sqlist *q) /*注意这个方法和下面方法参数传递的不同,但效果一样*/
{
int i,j;
for(i=0;i<maxsize;i++)
{
printf("%d ",q->elem[i]);
}
printf("/n");
return 0;
}
int destory(sqlist q) /*销毁一个顺序表*/
{
if(q.elem){
free(q.elem);
q.length=0;
}
return 1;
}
void clear(sqlist *q)
{
q->length=0;
}
int listlength(sqlist *q)
{
return q->length;
}
int ListInsert(sqlist *L,int i,int e) /*在第i个位置插入新元素e*/
{
int *p,*q,*newbase;
if(i<1 || i>(L->length+1))
return 0;
if((L->length) >= maxsize)
{
newbase=(int *)realloc(L->elem,(maxsize+2)*sizeof(int));
if(!newbase)
return 0;
L->elem = newbase;
L->length=L->length+2;
}
p=&(L->elem[i-1]);
for(q=&(L->elem[L->length-1]);q>=p;--q)
*(q+1)=*q;
*p=e;
++(L->length);
}
main()
{
int i,e;
sqlist a;
init(&a); /*初始化一个顺序表*/
prin(&a); /*把数据送入顺序表*/
prinf(&a); /*输出顺序表内容*/
printf("its length is %d",listlength(&a)); /*输出表的长度*/
printf("please select the position and no. you want to insert:");
scanf("%d,%d",&i,&e);
ListInsert(&a,i,e);
prinf(&a); /*输出顺序表内容*/
destory(a); /*销毁一个顺序表*/
clear(&a); /*清空顺序表*/
/*printf("%d", destory(a));
*/
getch();
}