大家好:
衷心希望各位点赞。
您的问题请留在评论区,我会及时回答。
顺序表的算法实现
#include <iostream>
#include <Windows.h>
#define MAX_SIZE 100
typedef int ElemType;
using namespace std;
// 顺序表
typedef struct _SqList
{
ElemType* elem;
int length;
int size;
} SqList;
// 构造一个空的顺序表
bool initList(SqList& sqList);
// 打印线性表
void printList(const SqList& L);
int main(void)
{
SqList sqList;
cout << "顺序表的初始化:" << endl;
if (initList(sqList))
{
cout << "初始化线性表成功" << endl;
printList(sqList);
}
else
{
cout << "初始化线性表失败" << endl;
}
system("pause");
return 0;
}
bool initList(SqList& sqList)
{
sqList.elem = new ElemType[MAX_SIZE];
if (sqList.elem != NULL)
{
// 分配成功
sqList.length = 0;
sqList.size = MAX_SIZE;
return true;
}
else
{
// 分配失败
return false;
}
}
void printList(const SqList& L)
{
cout << "线性表的存储空间 size = " << L.size
<< ",元素个数 length = " << L.length;
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i] << " ";
}
cout << endl;
}
运行截图:
顺序表添加元素
#include <iostream>
#include <Windows.h>
#define MAX_SIZE 100
typedef int ElemType;
using namespace std;
// 顺序表
typedef struct _SqList
{
ElemType* elem;
int length;
int size;
} SqList;
// 构造一个空的顺序表
bool initList(SqList& sqList);
// 打印线性表
void printList(const SqList& L);
// 顺序表添加元素
bool listAppend(SqList& L, int elem);
int main(void)
{
SqList sqList;
cout << "顺序表的初始化:" << endl;
if (initList(sqList))
{
cout << "初始化线性表成功" << endl;
cout << "此时," ;
printList(sqList);
}
else
{
cout << "初始化线性表失败" << endl;
}
// 插入元素
listAppend(sqList, 10);
listAppend(sqList, 30);
listAppend(sqList, 40);
listAppend(sqList, 20);
listAppend(sqList, 50);
cout << "----------" << endl;
cout << "插入元素后:";
printList(sqList);
system("pause");
return 0;
}
bool initList(SqList& sqList)
{
sqList.elem = new ElemType[MAX_SIZE];
if (sqList.elem != NULL)
{
// 分配成功
sqList.length = 0;
sqList.size = MAX_SIZE;
return true;
}
else
{
// 分配失败
return false;
}
}
void printList(const SqList& L)
{
cout << "线性表的存储空间 size = " << L.size
<< ",元素个数 length = " << L.length << endl;
if (L.length == 0) return;
cout << "线性表的元素:";
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i] << " ";
}
cout << endl;
}
bool listAppend(SqList& L, int elem)
{
if (L.length == L.size)
{
// 顺序表已满
cout << "顺序表已满,添加失败" << endl;
return false;
}
// 顺序表还有空间,插入元素
L.elem[L.length] = elem;
L.length++;
return true;
}
运行截图:
顺序表插入元素
#include <iostream>
#include <Windows.h>
#define MAX_SIZE 100
typedef int ElemType;
using namespace std;
// 顺序表
typedef struct _SqList
{
ElemType* elem;
int length;
int size;
} SqList;
// 构造一个空的顺序表
bool initList(SqList& sqList);
// 打印线性表
void printList(const SqList& L);
// 顺序表添加元素
bool listAppend(SqList& L, ElemType elem);
// 顺序表插入元素
// pos:插入元素的位置
// elem:插入的元素
bool listInsert(SqList& L, int pos, ElemType elem);
int main(void)
{
SqList sqList;
initList(sqList);
// 插入元素
listAppend(sqList, 10);
listAppend(sqList, 30);
listAppend(sqList, 40);
listAppend(sqList, 20);
listAppend(sqList, 50);
cout << "添加元素后:" << endl;
printList(sqList);
cout << "----------" << endl;
listInsert(sqList, 0, 60); // 在0号位置插入值为60的元素
cout << "插入元素后:" << endl;
printList(sqList);
system("pause");
return 0;
}
bool listInsert(SqList& L, int pos, ElemType elem)
{
if (pos < 0 || pos > L.size) return false; // 插入的位置不合法
if (L.length == L.size) return false; // 空间已满
// 移动元素
for (int i = L.length; i > pos; i--)
{
L.elem[i] = L.elem[i - 1];
}
L.elem[pos] = elem;
L.length++;
return true;
}
bool initList(SqList& sqList)
{
sqList.elem = new ElemType[MAX_SIZE];
if (sqList.elem != NULL)
{
// 分配成功
sqList.length = 0;
sqList.size = MAX_SIZE;
return true;
}
else
{
// 分配失败
return false;
}
}
void printList(const SqList& L)
{
cout << "线性表的存储空间 size = " << L.size
<< ",元素个数 length = " << L.length << endl;
if (L.length == 0) return;
cout << "线性表的元素:";
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i] << " ";
}
cout << endl;
}
bool listAppend(SqList& L, int elem)
{
if (L.length == L.size)
{
// 顺序表已满
cout << "顺序表已满,添加失败" << endl;
return false;
}
// 顺序表还有空间,插入元素
L.elem[L.length] = elem;
L.length++;
return true;
}
运行截图:
顺序表删除元素
#include <iostream>
#include <Windows.h>
#define MAX_SIZE 100
typedef int ElemType;
using namespace std;
// 顺序表
typedef struct _SqList
{
ElemType* elem;
int length;
int size;
} SqList;
// 构造一个空的顺序表
bool initList(SqList& sqList);
// 打印线性表
void printList(const SqList& L);
// 顺序表添加元素
bool listAppend(SqList& L, ElemType elem);
// 顺序表插入元素
// pos:插入元素的位置
// elem:插入的元素
bool listInsert(SqList& L, int pos, ElemType elem);
// 删除元素
// L:要执行删除操作的顺序表
// pos:删除元素的位置
bool listDelete(SqList& L, int pos);
int main(void)
{
SqList sqList;
initList(sqList);
// 插入元素
listAppend(sqList, 10);
listAppend(sqList, 30);
listAppend(sqList, 40);
listAppend(sqList, 20);
listAppend(sqList, 50);
cout << "添加元素后:" << endl;
printList(sqList);
cout << "----------" << endl;
listDelete(sqList, 0); // 删除在0号位置的元素
cout << "删除元素后:" << endl;
printList(sqList);
system("pause");
return 0;
}
bool listDelete(SqList& L, int pos)
{
if (pos < 0 || pos >= L.length) return false; // 要删除的元素位置不合法
if (L.length == 0) return false; // 顺序表为空,没有元素可被删除
// 向pos位置移动元素
for (int i = pos; i < L.length - 1; i++)
{
L.elem[i] = L.elem[i + 1];
}
L.length--;
return true;
}
bool initList(SqList& sqList)
{
sqList.elem = new ElemType[MAX_SIZE];
if (sqList.elem != NULL)
{
// 分配成功
sqList.length = 0;
sqList.size = MAX_SIZE;
return true;
}
else
{
// 分配失败
return false;
}
}
void printList(const SqList& L)
{
cout << "线性表的存储空间 size = " << L.size
<< ",元素个数 length = " << L.length << endl;
if (L.length == 0) return;
cout << "线性表的元素:";
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i] << " ";
}
cout << endl;
}
bool listAppend(SqList& L, int elem)
{
if (L.length == L.size)
{
// 顺序表已满
cout << "顺序表已满,添加失败" << endl;
return false;
}
// 顺序表还有空间,插入元素
L.elem[L.length] = elem;
L.length++;
return true;
}
bool listInsert(SqList& L, int pos, ElemType elem)
{
if (pos < 0 || pos > L.size) return false; // 插入的位置不合法
if (L.length == L.size) return false; // 空间已满
// 移动元素
for (int i = L.length; i > pos; i--)
{
L.elem[i] = L.elem[i - 1];
}
L.elem[pos] = elem;
L.length++;
return true;
}
运行截图:
顺序表的销毁
#include <iostream>
#include <Windows.h>
#define MAX_SIZE 100
typedef int ElemType;
using namespace std;
// 顺序表
typedef struct _SqList
{
ElemType* elem;
int length;
int size;
} SqList;
// 构造一个空的顺序表
bool initList(SqList& sqList);
// 打印线性表
void printList(const SqList& L);
// 顺序表添加元素
bool listAppend(SqList& L, ElemType elem);
// 顺序表插入元素
// pos:插入元素的位置
// elem:插入的元素
bool listInsert(SqList& L, int pos, ElemType elem);
// 删除元素
// L:要执行删除操作的顺序表
// pos:删除元素的位置
bool listDelete(SqList& L, int pos);
// 销毁顺序表
void listDestory(SqList& L);
int main(void)
{
SqList sqList;
initList(sqList);
// 插入元素
listAppend(sqList, 10);
listAppend(sqList, 30);
listAppend(sqList, 40);
listAppend(sqList, 20);
listAppend(sqList, 50);
cout << "添加元素后:" << endl;
printList(sqList);
cout << "----------" << endl;
listDestory(sqList);
cout << "销毁顺序表后:" << endl;
printList(sqList);
system("pause");
return 0;
}
void listDestory(SqList& L)
{
if (L.elem != NULL)
{
delete[] L.elem; // 释放堆区数据
L.elem = NULL; // 线性表的指针置为空
}
L.length = 0;
L.size = 0;
}
bool listDelete(SqList& L, int pos)
{
if (pos < 0 || pos >= L.length) return false; // 要删除的元素位置不合法
if (L.length == 0) return false; // 顺序表为空,没有元素可被删除
// 向pos位置移动元素
for (int i = pos; i < L.length - 1; i++)
{
L.elem[i] = L.elem[i + 1];
}
L.length--;
return true;
}
bool initList(SqList& sqList)
{
sqList.elem = new ElemType[MAX_SIZE];
if (sqList.elem != NULL)
{
// 分配成功
sqList.length = 0;
sqList.size = MAX_SIZE;
return true;
}
else
{
// 分配失败
return false;
}
}
void printList(const SqList& L)
{
cout << "线性表的存储空间 size = " << L.size
<< ",元素个数 length = " << L.length << endl;
if (L.length == 0) return;
cout << "线性表的元素:";
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i] << " ";
}
cout << endl;
}
bool listAppend(SqList& L, int elem)
{
if (L.length == L.size)
{
// 顺序表已满
cout << "顺序表已满,添加失败" << endl;
return false;
}
// 顺序表还有空间,插入元素
L.elem[L.length] = elem;
L.length++;
return true;
}
bool listInsert(SqList& L, int pos, ElemType elem)
{
if (pos < 0 || pos > L.size) return false; // 插入的位置不合法
if (L.length == L.size) return false; // 空间已满
// 移动元素
for (int i = L.length; i > pos; i--)
{
L.elem[i] = L.elem[i - 1];
}
L.elem[pos] = elem;
L.length++;
return true;
}
运行截图: