顺序线性表

/*建立线性表
*/

#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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值