基础知识
顺序表是用顺序存储结构来表示元素之间的线性关系。顺序表主要由数组和数组长度两部分构成。常用的操作:初始化、取值、查询、插入、删除、清空等操作。
线性表的顺序表在c++的STL库中可以用vector 来实现
#include<vector>
以下是自己定义的顺序表数据结构
1.头文件sqlist.h
#pragma once
#ifndef SQLIST
#define SQLIST
#define MAXLEN 100
struct sqlist
{
int *elem;//首元的下标,int可以替换成其他数据结构
int length;
};//定义一个顺序表
//顺序表的操作类
class sqList {
public:
sqList() {
sq.length = 0;
sq.elem = new int[MAXLEN];//分配空间
}//构造函数,初始化
~sqList();//析构函数
int GetElem(int i);//获取第i个位置上的值
int LocateELem(int el);//获取el在顺序表中的位置
int InseSert(int i, int el);//在第i个位置插入el
int Delete(int i);//删除第i个元素
void addToTail(int n);//初始化构造顺序表
void print();//遍历
private:
sqlist sq;
};
#endif // !CLIST
2.源文件sqList.cpp
#include<iostream>
#include"sqList.h"
using namespace std;
sqList::~sqList() {
sq.length = 0;
}
int sqList::GetElem(int i) {
if (i < 1 || i>sq.length)
return false;
else {
cout << sq.elem[i - 1] << endl;
return sq.elem[i - 1];
}
}
int sqList::LocateELem(int el) {
int i = 0;
for (i; i < sq.length; i++)
if (sq.elem[i] == el)
return i+1;
return false;
}
int sqList::InseSert(int i, int el) {
if (i < 1 || (i > sq.length + 1))
return false;
i = i - 1;
int q = 0;
for (i; sq.elem[i] != NULL; i++) {
q= sq.elem[i];
sq.elem[i] = el;
el = q;
}
sq.length = sq.length + 1;
return true;
}
int sqList::Delete(int i) {
if (i < 1 || (i > sq.length + 1))
return false;
i = i - 1;
int q = 0;
for (i; i<sq.length-1; i++) {
q = sq.elem[i+1];
sq.elem[i] = q;
}
sq.length = sq.length - 1;
return true;
}
void sqList::addToTail(int n) {
int i = 0;
for (i; i < n; i++)
cin >> sq.elem[i];
sq.length = n;
}
void sqList::print() {
int i = 0;
cout << "遍历结果" << endl;
for (i; i < sq.length; i++)
cout << sq.elem[i] << endl;
cout << "顺序表长度:";
cout << sq.length << endl;
}
int main() {
sqList L;
cout << "构造一个顺序表" << endl;
L.addToTail(6);
L.print();
cout << "删除第3个位置的值" << endl;
L.Delete(3);
L.print();
cout << "获取第2个位置上的值:";
L.GetElem(2);
cout << "在第二个位置插入";
L.InseSert(2, 8);
L.print();
cout << "查找2在顺序表位置" << endl;
cout << L.LocateELem(2) << endl;;
cout << "清空顺序表"<<endl;
L.~sqList();
L.print();
return 0;
}