数据结构顺序表

本文介绍了线性顺序表的定义及其基本操作,包括初始化、销毁、清空、判断空表、获取元素个数、定位元素、插入、删除等。提供了C++代码示例,展示了如何创建和操作顺序表。示例代码包括了顺序表的初始化、长度获取、元素位置查找、插入和删除等操作,以及一些辅助函数如打印和判断是否为空。
摘要由CSDN通过智能技术生成

线性顺序表的定义

线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像。

线性表的基本操作

1、初始化空的线性表
2、销毁线性表
3、清空线性表
4、判断线性表是否为空
5、得到线性表中元素的个数
6、返回线性表中第i个元素的值
7、定位线性表中某个元素的位置
8、在线性表中执行插入操作
9、在线性表中执行删除操作

线性表代码案例

#include<iostream>
#define MAXSIZE 100
using namespace std;
typedef int ElemType;
typedef struct
{
	ElemType* elem;
	int length;
}Sqlist;
//顺序表初始化
void InitList_Sq(Sqlist& L)
{
	L.elem = new ElemType[MAXSIZE];
	if (!L.elem)
	{
		cout << "顺序表初始化失败" << endl;

	}
	L.length = 0;
}
//顺序表长度
int ListLength_Sq(Sqlist& L)
{
	return L.length;
}
//顺序表是否为空表
bool ListEmpty_Sq(Sqlist& L)
{
	if (L.length == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}
//查询元素在顺序表中的位置
int LocateElem_Sq(Sqlist L,ElemType e)
{
	for (int i = 0; i < L.length;i++)
	{
		if (L.elem[i] == e)
		{
			return i+1;
		}
	}
	return -1;
}
//顺序表的插入
bool ListInsert_Sq(Sqlist& L, int i, ElemType e)
{
	if (i<=0 || i>L.length+1)
	{
		cout << "元素插入位置有误" << endl;
		return false;
	}
	if (L.length == MAXSIZE)
	{
		cout << "顺序表空间已满" << endl;
		return false;
	}
	for (int j = L.length; j > i; j--)
	{
		L.elem[j+1] = L.elem[j];
	}
	L.elem[i-1] = e;
	L.length++;
	return true;  
}
//顺序表的删除
bool ListDelete_Sq(Sqlist& L, int i, ElemType &e)
{
	if (i <=0 || i > L.length + 1)
	{
		cout << "元素删除位置有误" << endl;
		return false;
	}
	if (L.length == 0)
	{
		cout << "顺序表中没有可删除元素" << endl;
		return false;
	}
	e = L.elem[i-1];
	for (int j = i; j <= L.length; j++)
	{
		L.elem[j - 1] = L.elem[j];
	}
	L.length--;
	return true;
}
//清空线性表
void ClearList_Sq(Sqlist& L)
{
	L.length = 0;
}
//销毁线性表
void DeletryList_Sq(Sqlist& L)
{
	delete L.elem;
	L.elem = NULL;
	L.length = 0;
}
//返回第i个元素的值
bool GetElem(Sqlist L, int i,ElemType & e)
{
	if (i <= 0 || i > L.length + 1)
	{
		cout << "输入元素位置有误" << endl;
		return false;
	}
	e = L.elem[i - 1];
	return true;
}
//打印线性表
void PrintList_Sq(Sqlist& L)
{
	for (int j = 0; j <L.length; j++)
	{
		cout << L.elem[j] << " ";
	}
	cout << endl;
}
//顺序表的合并
void Union(Sqlist& La, Sqlist& Lb, ElemType& e)
{
	int La_length = ListLength_Sq(La);
	while (!ListEmpty_Sq(Lb))
	{
		ListDelete_Sq(Lb, 1, e);
		if (LocateElem_Sq(La, e) == -1)
		{
			ListInsert_Sq(La, La.length, e);
		}
	}
	ClearList_Sq(Lb);
}
//顺序表的元素转移
void Purge(Sqlist& La, Sqlist& Lb, ElemType& e)
{
	InitList_Sq(La);
	while (!ListEmpty_Sq(Lb))
	{
		ListDelete_Sq(Lb, 1, e);
		if (LocateElem_Sq(La, e) == -1)
		{
			ListInsert_Sq(La, La.length, e);
		}
	}
	ClearList_Sq(Lb);
}
//判断两顺序表是否相等
bool Isequal(Sqlist& La, Sqlist& Lb, ElemType& e)
{
	int la_length = ListLength_Sq(La);
	int lb_length = ListLength_Sq(Lb);
	Sqlist Lc;
	if (la_length != lb_length)
	{
		return false;
	}
	else
	{
		InitList_Sq(Lc);
		for (int i = 1; i <= La.length; i++)
		{
			GetElem(La, i, e);
			ListInsert_Sq(Lc, i, e);
		}
		for (int j = 1; j <= Lb.length; j++)
		{
			GetElem(Lb, j, e);
			int pos = LocateElem_Sq(Lc, e);
			if (pos == 0)
			{
				return false;
			}
			else
			{
				ListDelete_Sq(Lc, j, e);
			}
		}
		if (ListEmpty_Sq(Lc))
		{
			return true;
		}
		ClearList_Sq(Lc);
	}

}
int main()
{
	Sqlist L;
	//顺序表的初始化
	InitList_Sq(L);
	if (ListEmpty_Sq(L))
	{
		cout << "线性表是空表" << endl;
	}
	cout << "顺序表的插入" << endl;
	for (int i = 1; i <=15; i++)
	{
		ListInsert_Sq(L, i, i);//顺序表的插入
	}
	PrintList_Sq(L);//顺序表的打印
	cout <<"线性表目前长度为:" << ListLength_Sq(L) << endl;//顺序表长度
	cout << "元素的位置为:" << LocateElem_Sq(L, 1) << endl;//顺序表中指定元素的位置
	ElemType data;
	ListDelete_Sq(L, 2, data);//删除指定位置的元素
	cout << "删除的元素为:" << data << endl;
	GetElem(L, 2, data);//获取某个位置元素的值
	cout << "第2个元素为:" << data << endl;
	cout << "顺序表的删除" << endl;
	PrintList_Sq(L);//顺序表的打印
	ClearList_Sq(L);//清空顺序表
	cout << "顺序表的清空" << endl;
	PrintList_Sq(L);//顺序表的打印
	DeletryList_Sq(L);//顺序表的销毁
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值