数据结构 c语言版 顺序线性表的基本操作及算法的实现

数据结构已经上到树的内容了,前面的一些结构有所遗忘,
准备出一个系列写一下已经学过的的数据结构类型的基本操作,
主要内容:创建和删除该数据结构
				数据的访问,增加,插入,删除,遍历
一来作为自己学习的复习巩固和阶段见证
二来也希望能给以后同样学数据结构的同学们提供参考借鉴

萌新实力有限,不对的地方也希望大家指正一下,谢谢

这个系列的其他内容:

第一部分:相关头文件和结果状态代码


#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 10//表初始长度
#define LISTADD 1//表每次增加时增加的长度
#define ERROR -1;
#define OK 0;
#define Status int
#define ElemType int 
typedef struct {
	ElemType *elem;
	int length;//数组目前大小 
	int size;//数组现有储存空间大小 
	
}SqList;//定义顺序线性表 

第二部分:基本操作函数

Status InitSqList(SqList *L)
{	L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
	if(!L->elem)
	return ERROR;
	L->length=0;
	L->size=LIST_INIT_SIZE;
	return OK;
 } 
Status DestroySqList(SqList *L)//销毁表 
{	free(L->elem);
	L->elem=NULL;
	L->length=0;
	L->size=0; //长度和储存空点大小归零 
	return OK;
}
Status AddElem(SqList *L,ElemType e)//在表的最后添加一个元素 
{	if(L->length==L->size)//表满 
	{	ElemType*newbase=NULL;
		newbase=(ElemType*)realloc(L->elem,(L->size+LISTADD)*sizeof(ElemType));
		if(!newbase)
		{return ERROR;
		}
		
		L->elem=newbase;
		L->size+=LISTADD;
	}
	
	L->elem[L->length]=e;
	L->length++;
	return OK;
	
}
Status VisitElem(SqList L,int e)//访问表中第e个元素 ,返回其值 
{	if(e<=0||e>L.length)
	{return ERROR;
	}
	else
	{	
	 	return L.elem[e-1];
		}	
}
Status DeleteElem(SqList *L,int e)//删除表中第e个元素,返回它 
{	if(e<=0||e>L->length)
	{	return ERROR;
	}//删除位置越界
	else
	{	for(int i=e-1;i<L->length-1;i++)
		{	L->elem[i]=L->elem[i+1]; 
		}
		L->length--;
		return OK;
	}
	 
}
Status InsertElem(SqList *L,ElemType data,int e)//在表的第e个元素前插入元素 
{	if(e<1||e>=L->length+1)
	return ERROR; 
	if(L->length==L->size)//表满,拓展表 
	{	ElemType*newbase=NULL;
		newbase=(ElemType*)realloc(L->elem,(L->size+LISTADD)*sizeof(ElemType));
		if(!newbase)
		{return ERROR;
		}
		
		L->elem=newbase;
		L->size+=LISTADD;
	}
	for(int i=L->length-1;i>=e;i--)
	{	L->elem[i]=L->elem[i-1];
	}
	L->elem[e-1]=data;
	L->length++;
	return OK;
	 
}
void VisitList(SqList L)//遍历表 
{		for(int i=1;i<=L.length;i++)
	{	printf("第%d个元素为%d\n",i,VisitElem(L,i));
	}
}

第三部分:测试主函数

int main()
{	SqList test;
	InitSqList(&test);
	int i;
	for(i=1;i<=16;i++)
	{
	
	AddElem(&test,i);
	printf("当加入第%d个元素后,size=:"); 
	printf("%d\n",test.size);
	}
	printf("\n");
	
	DeleteElem(&test,12);
	DeleteElem(&test,7);
	
	printf("在删除第7和第12个元素后:\n");
	VisitList(test );
		printf("\n");
	
	InsertElem(&test,99,7);
	printf("在往第7个元素前插入99后:\n");
	VisitList(test );
	
	DestroySqList(&test);

	return 0;
}

测试结果

当加入第1个元素后,size=:10
当加入第2个元素后,size=:10
当加入第3个元素后,size=:10
当加入第4个元素后,size=:10
当加入第5个元素后,size=:10
当加入第6个元素后,size=:10
当加入第7个元素后,size=:10
当加入第8个元素后,size=:10
当加入第9个元素后,size=:10
当加入第10个元素后,size=:10
当加入第11个元素后,size=:11
当加入第12个元素后,size=:12
当加入第13个元素后,size=:13
当加入第14个元素后,size=:14
当加入第15个元素后,size=:15
当加入第16个元素后,size=:16

在删除第7和第12个元素后:
第1个元素为1
第2个元素为2
第3个元素为3
第4个元素为4
第5个元素为5
第6个元素为6
第7个元素为8
第8个元素为9
第9个元素为10
第10个元素为11
第11个元素为13
第12个元素为14
第13个元素为15
第14个元素为16

在往第7个元素前插入99后:
第1个元素为1
第2个元素为2
第3个元素为3
第4个元素为4
第5个元素为5
第6个元素为6
第7个元素为99
第8个元素为8
第9个元素为9
第10个元素为10
第11个元素为11
第12个元素为13
第13个元素为14
第14个元素为15
第15个元素为16
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值