手写简单的int类型顺序表
顺序表
是简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以
快速定位第几个元素,中间不允许有空值,插入、删除时需要移动大量元素。
顺序表的三个要素:
- 用 elems 记录存储位置的基地址
- 分配一段连续的存储空间 size
- 用 length 记录实际的元素个数,即顺序表的长度
参考代码如下
#include <iostream>using namespace std;#define MAX_SIZE 100typedef struct {int* elems; //顺序表头指针int length; //顺序表中元素个数int size; //顺序表的容量
}SqList;bool initList(SqList& L) {L.elems = new int[MAX_SIZE];if (L.elems == NULL) { return false; }L.length = 0;L.size = MAX_SIZE;
}void printList(SqList& L) {string str(80, '-');cout << str << endl; //分割线cout << "顺序表的空间:"<<L.size << endl;cout << "顺序表存储元素个数:"<<L.length << endl;cout << "表中数据: ";for (int i = 0; i < L.length; i++) {cout << L.elems[i] << " ";}cout << endl;
}
//添加元素
bool addList(SqList& L,int n) {if (L.length == L.size) { return false; }//顺序表满L.elems[L.length] = n;L.length++;return true;
}
//插入元素
bool insertList(SqList& L,int i,int num){if (i<0 || i>L.length) { return false; } //下标越界无效if (L.length == L.size) { return false; } //顺序表满for (int j = L.length - 1; j >= i; j--) {L.elems[j + 1] = L.elems[j]; //插入位置与后面的数据后移}L.elems[i] = num;L.length++;return true;
}
//删除元素
bool deleteList(SqList& L, int i) {//当下标越界,表中无元素时 均无法进行删除操作if (i < 0 || i >= L.length) { return false; } //当删除的是最后一个元素时if (i == L.length - 1) {L.length--;return true;}for (int j = i; j < L.length; j++) {L.elems[j] = L.elems[j + 1];}L.length--;return true;
}void destroyList(SqList& L) {if (L.elems) { delete[] L.elems; }L.length = 0;L.size = 0;
}int main() {SqList sqlist;if (initList(sqlist)) {cout << "初始化成功!" << endl;}else {cout << "初始化失败!" << endl;}printList(sqlist);//添加元素int n; //添加元素的个数int num; //添加的元素/*cout << "请输入要输入的元素个数:";cin >> num;for (int i = 0; i < num; i++) {cout << "请输入元素:";cin >> n;if (addList(sqlist, n)) {cout << "顺序表添加元素成功!" << endl;}else {cout << "顺序表添加元素失败!" << endl;}}*/for (int i = 0; i < 5; i++) { //便于测试addList(sqlist, i * 3 + 3);}printList(sqlist);//插入元素int i;//插入元素的下标cout << "输入插入元素的下标位置:";cin >> i;cout << "输入要插入的元素:";cin >> num;if (insertList(sqlist,i,num)) {cout << "插入顺序表成功!" << endl;}else {cout << "插入顺序表失败!" << endl;}printList(sqlist);//删除元素cout << "请输入要删除元素的下标:";cin >> i;if (deleteList(sqlist, i)) {cout << "删除元素成功!" << endl;}else {cout << "删除元素失败!" << endl;}printList(sqlist);//销毁顺序表destroyList(sqlist);printList(sqlist);system("pause");return 0;
}