顺序表的操作

/* 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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值