数据结构之顺序表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


顺序表

说明:顺序表最方便的就是能通过对应下标直接找到所对应的内存空间,因此十分方便,但代价是会占用一块连续的内存空间。

顺序表建立

定义:

定义一张表也就是在内存中开辟一段连续的空间,并给它名字以标识。

  • 静态定义顺序表(数组)
  • 动态定义顺序表(动态的数组)

方法:

  1. 生成表(通常会指定一个大小)
  2. 表中插入元素(注意是否会超过最大容量)
  3. 表中删除元素
  4. 修改表中元素
  5. 查找指定元素

代码

#include<iostream>
using namespace std;

#define MAX 100
typedef int Elemtype;
//顺序表定义
typedef struct list
{
	Elemtype* data;
	int size;
	int max_size;
}SqList;

//顺序表初始化函数
void InitList(SqList& L);
//插入函数
void InserList(SqList& L, Elemtype data, int n);
//删除函数
void DelList(SqList& L, int n);
//查找函数
int SerchList(SqList& L, Elemtype data);
//销毁顺序表
void DirstList(SqList& L);

//int main()
//{
//	SqList L;
//	InitList(L);
//	for (int i = 0; i < 20; i++)
//		InserList(L, i , i);
//	DelList(L, 0);
//	DelList(L, L.size - 1);
//	int index = SerchList(L, 3);
//	for (int i = 0; i < L.size; i++)
//		cout << L.data[i] << " ";
//	cout << endl << index << " " << L.size;
//
//
//	return 0;
//}
//初始化顺序表
//所有空间赋初值 0
void InitList(SqList& L)
{
	L.data = new Elemtype[MAX];
	for (int i = 0; i < MAX; i++)
	{
		L.data[i] = 0;
	}
	L.size = 0;
	L.max_size = MAX;
}

//向表中插入元素
// 0<=n<= SIZE
void InserList(SqList& L, Elemtype data,int n)
{
	//检测插入位置是否符合规范
	if (n < 0 || n > L.size)
	{
		cout << "插入位置非法!" << endl;
		exit(0);
	}
	// 如果当前空间已到达最大空间,则增加新空间
	if (L.size == L.max_size)
	{
		Elemtype* p = new Elemtype[L.max_size + MAX];
		for (int i = 0; i < L.max_size + MAX; i++)
		{
			if (i < L.max_size)
			{
				p[i] = L.data[i];
			}
			else
			{
				p[i] = 0;
			}
		}
	}
	//对插入位置进行移动,腾出该位置
	for (int i = L.size; i > n; i--)
	{
		L.data[i] = L.data[i - 1];
	}
	L.data[n] = data;
	//插入完成后表长增加 1
	L.size += 1;
}

//删除下标为 n 的元素
// 同时会将最后一位元素置为 0
void DelList(SqList& L, int n)
{
	//删除的位置超过给定范围
	if (n < 0 || n >= L.size)
	{
		cout << "删除位置非法" << endl;
		exit(0);
	}
	//对删除元素进行移动
	for (int i = n; i < L.size-1; i++)
	{
		L.data[i] = L.data[i + 1];
	}
	//删除后将最后一位置为 0
	L.data[L.size - 1] = 0;
	//表长减 1
	L.size -= 1;

}

//查找元素,若找到则返回下标
//没有找到则返回 -1
int SerchList(SqList& L, Elemtype data)
{
	for (int i = 0; i < L.size; i++)
	{
		if (L.data[i] == data)
			return i;
	}
	return -1;
}

//销毁顺序表
void DirstList(SqList& L)
{
	delete[] L.data;
	L.size = 0;
	L.max_size = 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值