顺序表的基本操作01

顺序表的基本使用


此代码是日常学习的小结
!!!仅供参考,如有错误请谅解,欢迎评论区留言。谢谢大家

开发环境:devc++,及C语言和数据结构

/*
* date:2023.6.23
* content:顺序表的基本操作及动态内存分配 
*/
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define InitSize 10
//定义结构体
typedef struct{
	int *data;//动态分配数组指针
	int MaxSize;//定义表的大小
	int length; //记录表的长度
}SqList;

//表的初始化
void InitList(SqList* L){
	//使用malloc函数初始化
	L->data = (int *)(malloc)(sizeof(int)*InitSize);
	L->length = 0;
	L->MaxSize = InitSize; 
	for(int i=0;i<L->MaxSize;i++){
		L->data[i] = i;//进行赋值
		L->length++;//记录长度
	}
}
//表的数组
void IncreaseSize(SqList* L,int len){
	//如果需要增加数组长度
	int *p = L->data;//用一个指针去指向第一个数
	L->data = (int *)(malloc)(sizeof(int)*(L->MaxSize+len));//增加后的数组,data指向新数组的第一个数 
	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){//位序i出插入元素e 
	if(i<1 || i>L->length+1){
		return false;
	}
	if(L->length>=L->MaxSize){
		return false;
	}
	for(int j=L->length;j>=i;j--){
		L->data[j] = L->data[j-1];//位序的后面元素都往后移 
	} 
	L->length++;
	L->data[i-1] = e;
	
	return true;
}
//表的删除
bool ListDelete(SqList* L,int i,int* e){
	if(i<1 ||i>L->length){
		return false;
	}
	*e = L->data[i-1];
	for(int j=i;j<L->length;j++){
		L->data[j-1] = L->data[j];//数组前移 
	}
	L->length--;
	return true; 
}
//按位序查找 
int GetElem(SqList *L,int i){
	return L->data[i-1];
}
//按值查找
int LocateElem(SqList *L,int e){
	//从第一个开始查找
	for(int i=0;i<L->length;i++){
		if(L->data[i] == e){//!!!注意:如果是结构体的比较,就是对应分量作比较或者额外写函数 
			return i+1;//位序加1 
		}
	} 
	return -1;
} 
//打印顺序表
void Print(SqList* L){
	for(int i=0;i<L->length;i++){
		printf("%d ",L->data[i]);
	}
	printf("\n数组的长度:%d\n",L->length);
}

int main(){
	SqList L;
	InitList(&L);
	IncreaseSize(&L,5);//如果这一没有的话,插入语句不合法。 
	if(ListInsert(&L,10,22)){
		Print(&L);
	}else{
		printf("你插入的位置不正确,请重新插入\n");
	}
	int e =-1;//没有任何意义,仅是一个实参用的
	if(ListDelete(&L,8,&e)){
		printf("已经删除的元素为=%d\n",e);
	}else{
		printf("删除的位序不对,删除失败\n");
	}
	int num =GetElem(&L,4);
	printf("位序为4的数是%d\n",num);
	int Location = LocateElem(&L,6);
	printf("数值为6的位置在%d\n",Location);
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值