顺序存储方式存储线性表

顺序存储方式存储线性表,完成基本操作包括插入,删除,查询等

#include<stdio.h>       //头文件 
#include<stdlib.h>
#define LIST_INIT_SIZE  100  //定义存储容量 
#define LISTINCREMNET 10    //扩展存储容量 
#define OVERFLOW 0         //允许溢出为0
/*定义顺序表的结构*/
typedef struct listonde   //自定义顺序表结构为struct 
{
	int *elem; //整型存储空间基地址
	int length;   //表长(数据元素个数)
	int listsize;  //存储容量为整型 
 } sqlist;
 
 
 void intlist (sqlist *la)  //构造一个空的线性表函数 
 {
 la->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)) ;  //开辟一个线性表存储空间
 if(!la->elem)       //判断la.elem是否在线性表空间内 
 exit(OVERFLOW);     //表示存储空间分配失败
 la->length=0;       //数据元素个数为0
 la->listsize= LIST_INIT_SIZE;  //存储容量定义为链表长度 
 } 
 
 
 void inputlist(sqlist *la)   //输入线性表中的元素函数 
 {
 int i=0;   //定义elem中元素下表从0开始 
 int x;
 scanf("%d",&x);  //输入语句
 while (x!=0)     //当输入数据不等于0时给elem中的元素赋值为x 
 {
 	la->elem[i]=x;
	 i=i+1;
	 scanf("%d",&x);  //输入语句
  } 
  la->length=i;  //数据元素个数为i 
 } 
 
 
 void outputlist (sqlist *la)  //输出 线性表中的元素   函数 
 {
 	int i;
 	printf("\nthe list is:");
 	for(i=0;i<la->length;i++) //输出线性表元素的循环 
 	printf("%3d",la->elem[i]);
 	printf("\nthe length of the list is:%d\n",la->length);
 }
 
 
 int locatelist(sqlist *la,int e)   //查找e元素并返回它的位序数 
 {
 	int i;
 	for(i=0;i<la->length;i++)
 	{
 		if(la->elem[i]==e)
 		return i+1;
	 }
	 return 0;
  } 
  
  
 void ListInsert_Sq(sqlist *la,int i,int e)    //插入一个元素i的合法值为1<=i<= ListInser_Sq(L)+1
  {
  	int *p,*q;
  	if(i<1||i>la->length+1)
  	printf("i is error!");
  	q=&(la->elem[i-1]);
  	for(p=&la->elem[la->length-1];p>=q;--p)
  	*(p+1)=*p;
  	*q=e;
  	++la->length;
  }

  
  void ListDelete_Sq(sqlist *la,int i,int *e) //删除一个元素 i的合法值为1<=i<= ListInser_Sq(L)+1
  {
  	int *p,*q;
  	if((i<1)||(i>la->length))//注意逻辑运算的优先级别
	  	printf("i is error!"); 
  	p=&la->elem[i-1];
  	*e=*p;
  	q=la->elem+la->length-1;
  	for(++p;p<=q;++p)
  	*(p-1)=*p;
  	--la->length;
  }
  
  
  int main()
  {
  	sqlist L;
  	printf("请输入线性表元素的值,以0结束:\n");
  	intlist (&L);
  	inputlist(&L);
  	outputlist (&L);
  	printf("请输入要查找的元素的值:\n");
  	int e,i;
	  scanf("%d",&e);
	  i= locatelist (&L,e);
	  if(i)
	  printf("%d在线性表中的位序是:%d\n",e,i);
	  else
	   printf("线性表中不存在元素%d\n",e);
	printf("请输入插入的位置和元素的值:\n");
	scanf("%d%d",&i,&e);
	ListInsert_Sq(&L,i,e) ;
	outputlist (&L);
	printf("请输入要删除的位置:\n");
	scanf("%d",&i);
	ListDelete_Sq(&L,i,&e);
	printf("要删除的位置上的值为:%d\n",e);
	return 0;
  }
  

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值