顺序表静态分配,元素类型为整型,大学基础数据结构

顺序表静态分配,元素类型为整型

大学基础数据结构

//检查过了没问题







#include <stdio.h>
#define Maxsize 10
typedef int ElemType;


typedef struct SqList_static{//定义并重命名结构体----->顺序表
	ElemType data[Maxsize];//成员为整形数组,数组大小为Maxsize,通过静态数组实现顺序表
	int len;//顺序表的当前长度,范围是0-Maxsize-1
}SqList_static;


void InitSqList_static(SqList_static &L){//初始化顺序表,顺序表类型的引用
	for (int i=0; i < Maxsize; i++) {
		L.data[i] = 0;//初始化顺序表元素全为0,避免残留在数组中的脏数据
	}
	L.len = 0;//初始化当前顺序表表长
}


void Print_SqList_static(SqList_static L) {//打印顺序表
	printf("\n");
	for (int i = 0; i <L.len; i++) {
		printf("%d ", L.data[i]);
	}
	printf("\n");
}


bool SqList_static_Search_by_loc(SqList_static L,int i,ElemType &e) {//按位置查找顺序表元素
	if (i<1 || i>L.len)	return false;//寻找位置不合法
	if (L.data == 0) return false;//当为空表的时候就算i是合法的访问的也是停留在数组中的脏数据并非当前表中的元素
	e=L.data[i-1];//如果合法返回e
	return true;
}


void SqList_static_Search_by_val(SqList_static L, ElemType e,int a[]) {//按值查找顺序表元素
	//int loc[Maxsize-1] = {0};//初始化记录位序的数组
	for (int i = 0,j=0; i < L.len; i++) {//整个顺序表扫描一遍
		if (e == L.data[i]) {//如果发现值相等
			a[j] = i + 1;//数组记录下来位序
			j++;//记录数组向后移动一位
		}
	}
}


bool SqList_static_Insert(SqList_static& L,int i,ElemType e) {//插入顺序表元素,i为1-l.len+1
	if (L.len >=Maxsize)	return false;//表满不行				?len应该不会>Maxsize吧
	if (i<1 || i>L.len + 1)	return false;//插入位置不合法
	for (int j=L.len; j >=i; j--) {//从表尾向后移动一位
		L.data[j] = L.data[j-1];
	}
	/*关于上面for的边界,当j=i的时候把第i位向后移动一位,
	当i=L.len+1的时候,j<i,不执行for循环直接将值放入L.len+1中*/
	L.data[i-1] = e;
	L.len++;//表长加一
	return true;
}


bool auto_SqList_static_Insert(SqList_static& L, ElemType e[],int num) {//实现在表尾依次插入数组中的多个数
	if (num+ L.len <= Maxsize) {
		for (int k = 0; k <num; k++) {
			SqList_static_Insert(L, L.len + 1, e[k]);
		}
		return true;
	}
	else return false;
}

bool SqList_delet(SqList_static& L, int i,ElemType &e) {//按照位置删除元素,并返回删除的元素
	if (L.len ==0 )return false;//空表没法删除元素
	if (i<1 || i>L.len )return false;//删除位置i非法
	e = L.data[i - 1];
	for (int j = i; j < L.len; j++) {
		L.data[j - 1] = L.data[j];
	}
	L.len--;
	/*删除达到的效果是逻辑上的,物理上表尾的最后一个元素还存在内存中*/
}


int main() {
	SqList_static L;//定义顺序表
	InitSqList_static(L);//初始化顺序表
	ElemType e[5] = { 1,2,3,4,5 };//存放添加元素的数组
	auto_SqList_static_Insert(L,e,5);//自动表尾添加数组中的元素
	auto_SqList_static_Insert(L, e, 5);//再次添加
	Print_SqList_static(L);//打印数组


	ElemType ret;//用来得到按照位置查找的返回值
	SqList_static_Search_by_loc(L, 3, ret);
	printf("%d\n", ret);//打印返回值


	int a[Maxsize] = { -1 };//用来存放按照值查找的位序
	SqList_static_Search_by_val(L, (ElemType)2,a);
	//printf("%p\n", a);//打印数组地址
	for (int i = 0; i < Maxsize; i++) {
		printf("%d", a[i]);
	}//打印存放位序的数组
	printf("\n");


	ElemType delet[10];//定义用来接受删除元素返回值的变量
	SqList_delet(L, 1,delet[0]);
	SqList_delet(L, 9,delet[1]);
	printf("delet0=%d,delet1=%d", delet[0], delet[1]);
	Print_SqList_static(L);


	SqList_static_Insert(L, 1, 1);
	SqList_static_Insert(L, 2, 2);
	SqList_static_Insert(L, 3, 3);
	Print_SqList_static(L);


	SqList_delet(L, 1, delet[0]);
	SqList_delet(L, 1, delet[1]);
	SqList_delet(L, 1, delet[2]);
	SqList_delet(L, 1, delet[3]);
	SqList_delet(L, 1, delet[4]);
	SqList_delet(L, 1, delet[5]);
	SqList_delet(L, 1, delet[6]);
	SqList_delet(L, 1, delet[7]);
	SqList_delet(L, 1, delet[8]);
	Print_SqList_static(L);
	for (int i = 0; i < 10; i++) {
		printf("%d", delet[i]);
	}//打印删除的返回值数组



	/*SqList_static_Insert(L, 4, e[3]);
	SqList_static_Insert(L, 5, e[4]);*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值