补上之前动态顺序表的初始化及基本操作

补上之前动态顺序表的初始化,实现语言依旧是C,注释都已经标注在代码中

/*
陈卓阳
2020年5月14日20:03:57
顺序表的基本操作(初始化,扩容,插入,删除,查找)
*/
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10 //默认的最大长度
typedef struct {
	int *data;
	int MaxSize; //顺序表最大容量
	int length; //顺序表的当前长度
}*PSqList,SqList;

void InitList(PSqList L) { //顺序表的初始化
	L->data = (int *)malloc(InitSize*sizeof(int));
	L->length = 0;
	L->MaxSize = InitSize;
}

void IncreaseSize(PSqList L,int len) { //扩容线性表
	int *p = L->data; //创建一个指针P指向data所指向的区域
	L->data = (int *)malloc((L->MaxSize + len)*sizeof(int)); //开辟一块新的空间,并将data指向这个空间的首部
	for(int i=0;i<L->MaxSize;i++) { //循环,将之前的数组复制过去
		L->data[i] = p[i];
	}
	L->MaxSize +=len; //MaxSize扩容
	free(p); //释放空间
}

bool ListInsert(PSqList L,int i,int e) { //在线性表的第i个位置上插入元素e
	if(i<1||i>L->length + 1) //判断所插入位置的合法性
		return false;
	if(L->length >= L->MaxSize) //判断顺序表是否已经满了
		return false;
	//开始插入,首先将i位置上的元素分别往后移动
	for(int j=L->length;j>=i;j--) {
		L->data[j] = L->data[j-1];
	}
	//移动完成,开始插入元素
	L->data[i-1] = e;
	L->length +=1;
	return true;

}

bool ListDelete(PSqList L,int i,int *p) {//三个参数分别为链表,删除第i个位置的元素,用于保存被删除的数据
	if(i<1||i>L->length) //判断删除的位置是否合法
		return false;
	*p = L->data[i-1];//先将要被删除的元素保存下来
	for(int j =i;j<L->length;j++) {
		L->data[j-1] = L->data[j];
	}
	L->length -=1;
	return true;
}

int LocateElem(SqList L,int i) {//查找顺序表中值为i的第一个元素的下标
	for(int j=0;j<L.length;j++) {
		if(L.data[j] == i)
			return j+1;
	}
}


int main(void) {
	SqList L;
	InitList(&L);
	ListInsert(&L,1,1);//在第一个位置插入1
	ListInsert(&L,2,2);//在第二个位置插入2
	int e = -1;//给要被删除的元素先开辟一块空间,用于保存要删除的元素
	ListDelete(&L,1,&e);//将第一个位置的元素删除
	int j = LocateElem(L,2);
	printf("删除的元素值为:%d\n",e);
	printf("目前的链表中元素为:\n");
	for(int i=0;i<InitSize;i++) 
		printf("%d\n",L.data[i]);
	printf("需要查找的元素位置为%d\n",j);
	return 0;
}

//int a[10]
//data = a
//data[1] = a[1]
//*(data +1) = a[1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值