文章目录
实现的东西
本文是基于c++实现顺序表的帖子
定义函数一览:
实现了
void InitList(Seqlist* L) ;//顺序表的初始化
int ListEmpty(Seqlist* L) ;//顺序表为空的标志是否为空
int ListLength(Seqlist* L) ;//求顺序表的长度
int getElem(Seqlist* L, int num, Datatype* e) ;//按序号查找元素
int ContentElem(Seqlist* L, Datatype x) ;//按内容查找顺序表,查找与给定元素相等的元素,如果查找成功返回序号
int InsertList(Seqlist* L, int d, Datatype x) ;//顺序表插入操作,参数为顺序表list和插入的位置和插入的数据
int DeleteList(Seqlist* L, int d, Datatype* e) ;//删除下标是d的数据,用*e保存被删除的元素
void show(Seqlist* L) ;//打印出顺序表的数据
void move(Seqlist* L, Datatype n) ;n基准的数
move函数是博主自己加的和顺序表的基本操作没有关系,功能是实现:将传入的顺序表L的所有比传入数n小的放n前面
所有比n大的数放n后面
一、各函数
<1>顺序表的初始化
void InitList(Seqlist* L) {//顺序表的初始化
//创建一个空的顺序表,设置元素为没有-1
L->last = -1;
}
<2>顺序表是否为空
int ListEmpty(Seqlist* L) {
//顺序表为空的标志是L.last是否为-1
if (L->last == -1) {
return 1;
}
else
return 0;
}
<3>求顺序表长度
int ListLength(Seqlist* L) {//求顺序表的长度
return (L->last + 1);
}
<4>按内容查找
int ContentElem(Seqlist* L, Datatype x) {//按内容查找顺序表,查找与给定元素相等的元素,如果查找成功返回序号
for (int i = 0; i <= L->last; i++) {
if (L->list[i] == x) {//如果相等返回序号
return i;
}
}
return -1;
}
<5>按下标插入
int InsertList(Seqlist* L, int d, Datatype x) {//顺序表插入操作,参数为顺序表list和插入的位置和插入的数据
if (L->last == Maxsize - 1) {
cout << "表满,插入失败" << endl;
return -1;
}
if (d < 0 || d >= L->last + 2) {
cout << "插入位置非法" << endl;
return -1;
}
for (int i = L->last; i >= d; i--) {//将位置d后面的元素全部后移
L->list[i + 1] = L->list[i];
}
L->list[d] = x;//将元素插入到d位置
L->last++;//表的元素+1
return 1;
}
<6>按下标删除元素
int DeleteList(Seqlist* L, int d, Datatype* e) {//删除下标是d的数据,用*e保存被删除的元素
if (d<0 || d>(L->last)) {
cout << "删除位置非法" << endl;
return -1;
}
for (int i = d; i < (L->last); i++) {
L->list[i] = L->list[i + 1];
}
L->last--;//表元素-1
*e = L->list[d];
return 1;
}
<7>打印链表数据
void show(Seqlist* L) {//打印出顺序表的数据
for (int i = 0; i <= L->last; i++) {
cout << "下标" << i << ":" << L->list[i] << endl;
}
}
<8>移动函数,使链表所有比基准小的数在基准前,比基准大的数在基准后
}
void move(Seqlist* L, Datatype n) {//n基准的数
Datatype y;//存下被换的值
for (int i = 0; i < 8; i++) {
if (L->list[i] < n) {//如果比之小,交换
y = L->list[i]; //存下被移动的数
for (int j = i-1; j >= 0; j--) {//移动小于基准的数
L->list[j + 1] = L->list[j];
}
L->list[0] = y;//将被移动数放在0位
}
}
}
二、完整代码
注释讲解都在代码里了哦#include<iostream>
#define Maxsize 100//设置数组最大为100
using namespace std;
/*
顺序表的操作
*/
typedef int Datatype;//给char别称取名为Datatype
typedef struct {
Datatype list[Maxsize];
int last;//存储数据元素,顺序表中最后一个数据在数组中的位置
}Seqlist;//定义顺序表
/*
将比a1小的值放a1前面,比a1大的值放后面
*/
int main() {
Seqlist L;
void InitList(Seqlist*);
void show(Seqlist*);
void move(Seqlist*, Datatype);
int InsertList(Seqlist*, int, Datatype);
int DeleteList(Seqlist*, int, Datatype*);
InitList(&L);
InsertList(&L, 0, 25);
InsertList(&L, 1, 30);
InsertList(&L, 2, 20);
InsertList(&L, 3, 60);
InsertList(&L, 4, 10);
InsertList(&L, 5, 35);
InsertList(&L, 6, 15);
InsertList(&L, 7, 70);
show(&L);
move(&L, 25);
show(&L);
cout << " " << endl;
int b = 1;
int* A = &b;
for (int i = 1, wei = 0; i < 8; i++) {
if (L.list[i] < L.list[wei]) {
InsertList(&L, wei, L.list[i]);
++wei;
DeleteList(&L, i + 1, A);
}
}
show(&L);
return 0;
}
void InitList(Seqlist* L) {//顺序表的初始化
//创建一个空的顺序表,设置元素为没有-1
L->last = -1;
}
int ListEmpty(Seqlist* L) {
//顺序表为空的标志是L.last是否为-1
if (L->last == -1) {
return 1;
}
else
return 0;
}
int ListLength(Seqlist* L) {//求顺序表的长度
return (L->last + 1);
}
int getElem(Seqlist* L, int num, Datatype* e) {//按序号查找元素
if (num<-1 || num > L->last + 1) {//如果num<-1 或者是元素没num大 就查找失败
return -1;
}
else
*e = L->list[num];//将查找的值赋值给e
return 1;
}
int ContentElem(Seqlist* L, Datatype x) {//按内容查找顺序表,查找与给定元素相等的元素,如果查找成功返回序号
for (int i = 0; i <= L->last; i++) {
if (L->list[i] == x) {//如果相等返回序号
return i;
}
}
return -1;
}
int InsertList(Seqlist* L, int d, Datatype x) {//顺序表插入操作,参数为顺序表list和插入的位置和插入的数据
if (L->last == Maxsize - 1) {
cout << "表满,插入失败" << endl;
return -1;
}
if (d < 0 || d >= L->last + 2) {
cout << "插入位置非法" << endl;
return -1;
}
for (int i = L->last; i >= d; i--) {//将位置d后面的元素全部后移
L->list[i + 1] = L->list[i];
}
L->list[d] = x;//将元素插入到d位置
L->last++;//表的元素+1
return 1;
}
int DeleteList(Seqlist* L, int d, Datatype* e) {//删除下标是d的数据,用*e保存被删除的元素
if (d<0 || d>(L->last)) {
cout << "删除位置非法" << endl;
return -1;
}
for (int i = d; i < (L->last); i++) {
L->list[i] = L->list[i + 1];
}
L->last--;//表元素-1
*e = L->list[d];
return 1;
}
void show(Seqlist* L) {//打印出顺序表的数据
for (int i = 0; i <= L->last; i++) {
cout << "下标" << i << ":" << L->list[i] << endl;
}
}
void move(Seqlist* L, Datatype n) {//n基准的数
Datatype y;//存下被换的值
for (int i = 0; i < 8; i++) {
if (L->list[i] < n) {//如果比之小,交换
y = L->list[i]; //存下被移动的数
for (int j = i-1; j >= 0; j--) {//移动小于基准的数
L->list[j + 1] = L->list[j];
}
L->list[0] = y;//将被移动数放在0位
}
}
}
二、代码运行结果展示
总结
本贴用与自己复习与他人借鉴 代码都是博主自己写的,如果对你有用的话,点个
呐