线性表--顺序表(数据结构)

这篇博客介绍了线性表的顺序表实现,包括结构体创建、线性表的初始化、显示、删除、长度计算、查找元素及位置、插入和删除操作,适合数据结构初学者实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初学数据结构,便多作了些实践内容,将课本上的内容自己理解后写了一遍。希望付出值得。

0.前提准备

#define MAXSIZE 50
typedef  int ElemType;

1.建立结构体

typedef struct
{
	ElemType Data[MAXSIZE];
	int len;
}SqList;//建立结构体

2.创造线性表

void CreatList(SqList*& L, ElemType a[], int n) //创造线性表
{
	int i = 0;
	int k = 0;
	L = (SqList*)malloc(sizeof(SqList));
	while (i < n)
	{
		L->Data[k] = a[i];
		k++; i++;
	}
	L->len = k;
}

3.展示线性表

void DisplayList(SqList*& L)  //展示线性表
{
	for (int i = 0; i < L->len; i++)
	{
		cout << L->Data[i] << " ";
	}
}

4.Initial SqList

void InitList(SqList* &L) //Initial SqList
{
	L = (SqList* )malloc(sizeof(SqList));
	L->len = 0;
}

5.删除线性表

void DestroyList(SqList*& L) //删除线性表
{
	free(L);
}

6.线性表长度

int LenList(SqList*& L) //线性表长度
{
	return L->len;
}

7.求线性表中某个数据元素值

bool GetElem(SqList*& L, int i, ElemType e) //求线性表中某个数据元素值
{
	if (i <= 1 || i >= L->len)
		return false;
	e = L->Data[i - 1];
	return true;
}

8.查找元素位置

int LocateElem(SqList*& L, ElemType e) //查找元素位置
{
	int i = 0;
	while (i < L->len && L->Data[i] != e)
	{
		i++;
		if (i > L->len)
			return 0;
		else return i + 1;
	}
}

9.在i处插入e值

bool ListInsert(SqList*& L, int i, ElemType e) //在i处插入e值
{
	if (i<1 || i>L->len + 1)
		return false;
	i--;//变相把逻辑符号中首位0,变为首位1;
	for (int j = L->len; j > i; j--)
		L->Data[j] = L->Data[j - 1];
	L->Data[i] = e;
	L->len++;
  
}

10.删除元素

bool DeleList(SqList*& L, int i) //删除元素
{
	if (i<1 || i>L->len)
		return false;
	i--;

	for (int j = i; j < L->len; j++)
	{
		L->Data[j ] = L->Data[j+1];

	}
	L->len--;
	return true;

}

最后源代码送上

#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 50
typedef  int ElemType;
typedef struct
{
	ElemType Data[MAXSIZE];
	int len;
}SqList;//建立结构体
void CreatList(SqList*& L, ElemType a[], int n) //创造线性表
{
	int i = 0;
	int k = 0;
	L = (SqList*)malloc(sizeof(SqList));
	while (i < n)
	{
		L->Data[k] = a[i];
		k++; i++;
	}
	L->len = k;
}
void DisplayList(SqList*& L)  //展示线性表
{
	for (int i = 0; i < L->len; i++)
	{
		cout << L->Data[i] << " ";
	}
}
void InitList(SqList* &L) //Initial SqList
{
	L = (SqList* )malloc(sizeof(SqList));
	L->len = 0;
}
void DestroyList(SqList*& L) //删除线性表
{
	free(L);
}
int LenList(SqList*& L) //线性表长度
{
	return L->len;
}
bool GetElem(SqList*& L, int i, ElemType e) //求线性表中某个数据元素值
{
	if (i <= 1 || i >= L->len)
		return false;
	e = L->Data[i - 1];
	return true;
}
int LocateElem(SqList*& L, ElemType e) //查找元素位置
{
	int i = 0;
	while (i < L->len && L->Data[i] != e)
	{
		i++;
		if (i > L->len)
			return 0;
		else return i + 1;
	}
}
bool ListInsert(SqList*& L, int i, ElemType e) //在i处插入e值
{
	if (i<1 || i>L->len + 1)
		return false;
	i--;//变相把逻辑符号中首位0,变为首位1;
	for (int j = L->len; j > i; j--)
		L->Data[j] = L->Data[j - 1];
	L->Data[i] = e;
	L->len++;
  
}
bool DeleList(SqList*& L, int i) //删除元素
{
	if (i<1 || i>L->len)
		return false;
	i--;

	for (int j = i; j < L->len; j++)
	{
		L->Data[j ] = L->Data[j+1];

	}
	L->len--;
	return true;

}


int main()
{
	int n;
	cin >> n;
	SqList* L;
	int i, value;
	int* a = (int*)malloc(n * sizeof(int));
	for (i = 0; i < n; i++) //下标值即为对应元素值
		a[i] = i;
	CreatList(L, a, n);
	DisplayList(L);
    ListInsert(L, i, value); //i表示位置,value表示插入的值
	DisplayList(L);
	DeleList(L, i);//i 表示删除元素的位置
	DisplayList(L);
	LenList(L); //线性表长度
	GetElem(L, i, value); //查找相应位置的值是否存在
	LocateElem(L, value); //定位为value值得位置
	InitList(L);//初始化线性表
	DestroyList(L);//释放内存



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值