c语言顺序表操作

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct SqList {
	ElemType* data;
	int length;
}SqList;

/*
	顺序表的初始化
*/
void InitSqList(SqList& L) {
	L.data = (ElemType*)malloc(sizeof(ElemType) * MAXSIZE);
	if (!L.data)exit(-1);
	L.length = 0;
}

/*
	销毁顺序表
*/
void DestroySqList(SqList& L) {
	if (L.data)
	{
		free(L.data);
	}	
}

/*
	清空顺序表
*/
void ClearSqList(SqList& L) {
	L.length = 0;
}

/*
	求顺序表的长度
*/
int GetLength(SqList L) {
	return L.length;
}

/*
	判断顺序表是否为空
*/
bool IsEmpty(SqList L) {
	if (L.length == 0)
	{
		return true;
	}
	else {
		return false;
	}
}

/*
	顺序表的取值(根据位置i获取相应位置元素的内容)
*/
int GetElem(SqList L, int i, ElemType& e) {
	if (i < 1 || i > L.length) return -1;
	e = L.data[i - 1];
	return 1;
}

/*
	顺序表的查找与指定值e相同的数据元素位置
*/
int LocateElem(SqList L, ElemType& e) {
	for (int i = 0; i < L.length; i++)
	{
		if (L.data[i] == e) {
			return i + 1;
		}
	}
	return 0;
}

/*
	顺序表的插入
*/
int ListInsert_Sq(SqList& L, int i, ElemType e) {
	if (L.length == MAXSIZE) return -1;
	if (i < 1 || i > L.length + 1)return -1;// 1 2 3 4 5|| 可以在6号位置插入
	for (int j = L.length - 1; j >= i - 1; j--)
	{
		L.data[j + 1] = L.data[j];
	}
	L.data[i - 1] = e;
	L.length++;
	return 1;

}

/*
	顺序表的删除
*/
int ListDelete_Sq(SqList& L, int i, ElemType& e) {
	if (i < 1 || i > L.length) return -1;
	for (int j = i; j < L.length; j++)
	{
		L.data[j - 1] = L.data[j];
	}
	L.length--;
	return 1;
}

/*
	输出测试
*/
void Test(SqList L) {
	for (int i = 0; i < L.length; i++)
	{
		printf("%d\n", L.data[i]);
	}
}

int main() {
	SqList L;
	InitSqList(L);
	ListInsert_Sq(L, 1, 1);
	ListInsert_Sq(L, 2, 2);
	ListInsert_Sq(L, 3, 3);
	ListInsert_Sq(L, 4, 4);
	ListInsert_Sq(L, 5, 5);
	ElemType e;
	ListDelete_Sq(L, 3, e);
	Test(L);
	return 0;
}
posted @ 2021-10-09 22:29  CharHao  阅读(92)  评论(0编辑  收藏  举报