数据结构已经上到树的内容了,前面的一些结构有所遗忘,
准备出一个系列写一下已经学过的的数据结构类型的基本操作,
主要内容:创建和删除该数据结构
数据的访问,增加,插入,删除,遍历
一来作为自己学习的复习巩固和阶段见证
二来也希望能给以后同样学数据结构的同学们提供参考借鉴
萌新实力有限,不对的地方也希望大家指正一下,谢谢
这个系列的其他内容:
第一部分:相关头文件和结果状态代码
#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