数据结构线性表的顺序存储实现(C语言)

这是我根据上课,作业要求填写的代码整理而来的。
代码涵盖了与线性表基本算法:初始化、遍历、元素插入,取数据、定位、删除以及注销。

#include <iostream>
#include <stdio.h>
#include  <stdlib.h>

#define ok 1
#define error 0
#define listinitsize   50
#define listincrement 10

typedef int  status;
typedef char  elemtype; 
typedef struct{
   	elemtype  *elem;
   	int length;
   	int listsize;
   }sqlist;

status initlist(sqlist &L)
{	// 0 初始化 
	L.elem = (elemtype * )malloc(listinitsize*sizeof(elemtype));
	L.length = 0;
	L.listsize = listinitsize;
	return ok;

}

status listinsert(sqlist &L, int i, elemtype e)  
{  	// 1 插入 
int j;
if(i<1&&i>L.length+1) return error;
for(j=L.length;j>=i;j--){
     L.elem[j]=L.elem[j-1];
}
   L.elem[i-1]=e;
   L.length++;
    return ok;

}

status  listtraverse(sqlist L)
{ 	// 2 遍历 
	printf("The length of the sqlist: %d\n",L.length);
	printf("The data of the sqlist: ");
	for(int i=0;i<L.length;i++)
      printf("%c ",L.elem[i]);
      printf("\n");
       return ok;

}

status   getelem(sqlist L,int i, elemtype &e)
{	// 3 取数据 
if(i<1||i>L.length)
return error;
e=L.elem[i-1];
return ok;

}

int locateelem(sqlist L,elemtype  e)
{  // 4 定位 
int i;
for(i=0;i<L.length;i++)
if(L.elem[i]==e)
return i+1;

}

status listdelete(sqlist &L,int i,elemtype &e)
{   // 5 删除 
if(i<1||i>L.length) return error;
elemtype *q;
e=L.elem[i-1];
for(q=&L.elem[i-1];q<=&L.elem[L.length-1];q++)
*q=*(q+1);
L.length--;
return ok;

}

status destroylist(sqlist &L)
{ 	// 6 注销 
delete []L.elem;
L.length=0;
L.listsize=0;
return ok;

}

int main()
{	 // 线性表的顺序存储实现
	elemtype e;
	sqlist L;

	int TestCase;
	scanf("%d", &TestCase);

	printf("(1)初始化线性表L:\n");
	initlist(L);

	printf("(2)依次在线性表L尾插入字符a,b,c,d,e:\n");
	listinsert(L,1,'a');
	listinsert(L,2,'b');
	listinsert(L,3,'c');
	listinsert(L,4,'d');
	listinsert(L,5,'e');
	printf("(3)在线性表L的第2个位置之前插入字符f:\n");
	listinsert(L,2,'f');

	switch( TestCase ){
		case 1:		// 遍历 
			printf("(4)输出线性表L:\n");
			listtraverse(L);
			break;

		case 2:		// 取元素 
			printf("(5)输出线性表L的第3个元素:");
			getelem(L,3,e);
			printf("%c\n",e);
			break;

		case 3:		// 定位 
			printf("(6)输出元素d在线性表L的位置:%d\n",locateelem(L,'d'));
			break;

		case 4:		// 删除 
			printf("(7)删除线性表L的第4个元素:\n");
			listdelete(L,4,e);
			printf("(8)输出线性表L:\n");
			listtraverse(L);
			break;
			
		default:	// 综合 (遍历、取数、定位、删除、遍历) 
			printf("(4)输出线性表L:\n");
			listtraverse(L);

			printf("(5)输出线性表L的第3个元素:");
			getelem(L,3,e);
			printf("%c\n",e);

			printf("(6)输出元素d在线性表L的位置:%d\n",locateelem(L,'d'));

			printf("(7)删除线性表L的第4个元素:\n");
			listdelete(L,4,e);

			printf("(8)输出线性表L:\n");
			listtraverse(L);
	}

	printf("(9)释放线性表L。\n");
	destroylist(L);

	return ok;
}


这是代码运行结果:
在这里插入图片描述

最后,小生不才,感谢浏览。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值