数据结构之顺序表

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

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

#include<stdio.h>
#include<stdlib.h> 
#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<L.length;i++)
		L.data[i]=p[i];
	L.maxsize=L.maxsize+len;
	free(P);	
} */ 
//插入元素 
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;
}
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值