王道数据结构C语言顺序表基本操作实现

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#define MaxSize 50
typedef struct {//顺序表(静态实现)
	int data[MaxSize];//顺序表元素
	int length;//顺序表当前长度
}SqList;//类型定义

#define InitSize 100;
typedef struct {//动态实现
	int* data;//动态分配数组的指针
	int Maxsize, Length;//数组最大容量和当前个数
}SeqList;//动态分配数组顺序表的类型定义
//初始动态分配语句
//L.data = (int*)malloc(sizeof(int)*InitSize);

void init(SqList* L) {//初始化一下
	L->length = 10;
	for (int i = 0;i < L->length;i++) {
		L->data[i] = i;
	}
}
void MyPrint(SqList L) {
	for (int i = 0;i < L.length;i++) {
		printf("%d", L.data[i]);//结构体本身引用.
	}
}

//顺序表插入
bool ListInsert(SqList* L, int i, int e) {//在L的i位置插入e
	//1 2 4 5 6
	//0 1 2 3 4 5
	//要求在2号位置插入3
	if (i < 0 || i >= L->length) {//不能在非法位置插入
		return false;
	}
	if (L->length == MaxSize) {//已经到上限了,不能再插了
		return false;
	}
	int j = 0;
	for (j = L->length;j >= i;j--) {
		L->data[j] = L->data[j-1];//结构体地址引用->
	}
	L->data[j] = e;
	L->length++;
	return true;
}


//顺序表删除
bool ListDelete(SqList* L,int i) {//删掉L第i个位置元素
	if (i < 0 || i >= L->length) {//非法位置,没法删
		return false;
	}
	if (L->length == 0) {//没有元素,没法删
		return false;
	}
	for (int j = i;j < L->length-1;j++) {
		L->data[j] = L->data[j + 1];
	}
	L->length--;
	return true;
}


//按值查找,找到第一个元素值为e的元素,返回下标
int LocateElem(SqList* L ,int e) {
	for (int i = 0;i < L->length;i++) {
		if (L->data[i] == e) {
			return i;//这里是返回下标,如果是返回位序,则返回i+1
		}
	}
}

int main()
{
	SqList L;
	init(&L);
	printf("插入前:");
	MyPrint(L);
	printf("\n");
	ListInsert(&L, 4, 5);
	printf("插入后:");
	MyPrint(L);
	printf("\n");
	printf("删除后:");
	ListDelete(&L, 6);
	MyPrint(L);
	printf("\n");
	printf("第一个值为5的元素下标为:%d",LocateElem(&L,5));
	return 0;
}

王道数据结构C语言顺序表基本操作实现_第1张图片

你可能感兴趣的:(数据结构代码汇总,c语言,数据结构,顺序表,王道)