数据结构之顺序表

数据结构之顺序表(C语言实现)

功能:初始化,查,插,删(增加表长度)

#include
#include 
#define size 10
//	静态分配数组空间 
typedef struct{
	int data[size];//静态数组 
	int length;//顺序表长度 
}SqList;//定义顺序表类型 
//初始化 
void InitList(SqList &L){
	for(int i=0;i<size;i++)
		L.data[i]=0;//设置初值,以防脏数据 
	L.length=0;//初始长度为0 
} 

/*#define initsize 10 顺序表初始长度 
typedef struct{
	int *data;//动态分配数组空间的指针 
	int maxsize;//顺序表最大容量 
	int length;//顺序表当前长度 
}SqList; */
/*
C语言动态分配、释放空间(malloc、free函数
L.data=(int *)malloc(sizeof(int)*initsize)

C++使用new、delete关键字 
*/
/*void InitList(SqList &L){
	L.data=(int *)malloc(initsize*sizeof(int));
	L.length=0;
	L.maxsize=initsize;
}
//增加表长度
void IncreaseList(SqList &L,int len){
	//本质上是重新开辟一块空间 ,然后将原表中元素复制到新空间,再释放原表空间
	int *p=L.data;
	L.data=(int *)malloc((L.maxsize+len)*sizeof(int));
	for(int i=0;i 
//插入元素 
bool ListInsert(SqList &L,int i,int e){//使用&将改变带回main(); 
	//在位序i出插入元素
	
	//返回bool类型,和两个if提高程序健壮性 
	if(i<1||i>L.length+1)
		return false;
	if(L.length>=size)
		return false; 
	for(int j=L.length;j>=i;j--)
		L.data[j]=L.data[j-1];//位序i后面的元素往后挪 
	L.data[i-1]=e;
	L.length++;
	return true;
} 
//删除元素 
bool ListDelete(SqList &L,int i,int &e){
	//删除元素e,并返回bool类型值判断是否删除成功
	if(i<1||i>L.length)
		return false;
	e=L.data[i-1]; //将被删除的元素赋值给e
	for(int j=i;j<L.length;j++)
		L.data[j-1]=L.data[j];//位序后面的元素往前挪 
	L.length--;
	return true; 
}
//按位查找 
int GetValue(SqList L,int i){
	return L.data[i-1];
} 
//按位查找 
int GetPosition(SqList L,int e){
	for(int i=0;i<L.length;i++)
		if(L.data[i]==e)
			return i+1;//返回位序 
	return 0;
}
int main() {
	SqList list;
	InitList(list);
	for(int i=0;i<5;i++)
		ListInsert(list,i,i);
	printf("顺序表内容:\n"); 
	for(int i=0;i<5;i++)
		printf("%d ",list.data[i]);
	printf("\n");
	printf("顺序表长度为%d\n",list.length);
	int e=-1;
	if(ListDelete(list,2,e))
		printf("e=%d\n",e);
	for(int i=0;i<list.length;i++)
		printf("%d ",list.data[i]);
	return 0;
}
 

你可能感兴趣的:(数据结构,数据结构)