提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
顺序表
说明:顺序表最方便的就是能通过对应下标直接找到所对应的内存空间,因此十分方便,但代价是会占用一块连续的内存空间。
顺序表建立
定义:
定义一张表也就是在内存中开辟一段连续的空间,并给它名字以标识。
- 静态定义顺序表(数组)
- 动态定义顺序表(动态的数组)
方法:
- 生成表(通常会指定一个大小)
- 表中插入元素(注意是否会超过最大容量)
- 表中删除元素
- 修改表中元素
- 查找指定元素
代码
#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;
}