0
点赞
收藏
分享

微信扫一扫

数据结构线性表的实现(C语言)

_刘彦辉 2022-04-03 阅读 99
#include<stdio.h>
#include<stdlib.h>
#define InitSize 100
typedef struct {                      //定义一个名为Sqlist的结构体
	int *data;
	int MaxSize;
	int length;
} Sqlist;

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

//扩大表
void IncreaseList(Sqlist *L,int len) {
	int *p = L->data;
	L->data = (int *)malloc((InitSize+len)*sizeof(int));
	for (int i = 0 ; i<L->length ; i++)
		L->data[i] = p[i];
	L->MaxSize = L->MaxSize + len;
	free (p);
}

//在表的某个位置插入元素e
bool ListInsert(Sqlist *L,int i,int e) {
	if (i<1 || i>L->length+1)									//顺序表是连续的 假如表长为7则可在第8个位置插入 所以>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->data[i-1] = e;
	L->length++;
	return true;
}

//在某个位置删除并将元素值返回给e
bool ListDlete(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[i-1] = L->data[i];
	L->length--;
	return true;
}

//顺序表按位查找
int GetElem(Sqlist *L,int i) {
	return L->data[i-1];
}

//顺序表按值查找
int LocateElem(Sqlist *L,int i) {
	for (int j = 0 ; j<L->length ; j++) {
		if (L->data[j] == i)
			return i+1;
	}
	return 0;
}
int main() 
{
	int len,i,e;
	Sqlist L;								//声明一个顺序表
	InitList(&L);							//初始化表
	IncreaseList(&L,len);					//扩大表 len为长度
	if (ListInsert(&L,i,e))					
		printf("插入元素成功\n");
	else
		printf("插入元素失败");
	if(ListDlete(&L,i,&e))
		printf("删除元素成功,删除元素为%d\n",e);
	else
		printf("删除失败");
		return 0;
}
举报

相关推荐

0 条评论