顺序表的初始化及遍历

#include<iostream>
using namespace std;
#define OK 1 //表示状态
#define OVERFLOW -2
#define MAXSIZE 100  //数组最大长度
typedef int Elemtype;
typedef int Status;
typedef struct {
    Elemtype *elem; //存储空间的基地址
    int lenght;  //顺序表的长度
}Sqlist;  //定义顺序表
Status Initlist(Sqlist &L) {
    L.elem = new Elemtype[MAXSIZE]; //开辟一个存放整数的数组(包括MAXSIZE个整数),返回首元素的地址
    if (!L.elem) exit(OVERFLOW); //开辟空间失败退出程序 OVERFLOW的值非0表示非正常退出
    L.lenght = 0;  //顺序表长度为0,表示当前顺序表里并没有存入数据
    return OK;
}
Status ListTraverse(Sqlist L) {  //遍历顺序表
    Elemtype *p;
    p = L.elem;
    if (L.lenght > 0) {
        cout << "当前顺序表一共有" << L.lenght << "个元素,分别是" << endl;
        for (int i = 1; i < L.lenght; i++) {
            cout << *p << endl;
            *p++;
        }
    }
    else {
        cout << "当前顺序表为空!" << endl;
    }
    return 0;
}
int main() {
    Sqlist la;
    Initlist(la);
    ListTraverse(la);
    delete la.elem;
    system("pause");
    return 0;
}

 顺序表的插入、取值、查找和删除

#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef int Elemtype;
// 定义顺序表结构
typedef struct {
    Elemtype *elem; // 顺序表存储空间的基地址
    int length; //顺序表的长度
}Sqlist;
// 初始化顺序表
Status InitList(Sqlist &L) {
    L.elem = new Elemtype[MAXSIZE]; // 在内存中为顺序表开辟存储空间
    if (!L.elem) exit(OVERFLOW);
    L.length = 0; // 空表长度为0
    return OK;
}
// 向顺序表中插入数据
Status InsertList(Sqlist &L, int i, Elemtype e) { //三个数据分别是 顺序表 插入数据的位置 插入数据的值
    // 第一步 先判断插入数据的位置是否合法 i的合法范围是1到L.length+1
    if (i<1 || i>L.length + 1) return ERROR;
    // 第二步 判断存储空间是否已满
    if (L.length == MAXSIZE) return ERROR;
    // 第三步 将第i个到最后一个元素一次向后移动一个位置 将第i个位置空出来
    for (int j = L.length - 1; j >= i - 1; j--) {
        L.elem[j + 1] = L.elem[j];
    }
    // 将数据插入到顺序表
    L.elem[i - 1] = e;
    ++L.length; //表长加一  此步存疑 之后实验操作一下
    return OK;
}
// 遍历顺序表
Status ListTraverse(Sqlist L) {
    // 遍历顺序表要通过指针间接访问数组
    Elemtype *p;
    p = L.elem; //指针变量p指向数组第一个元素
    // 第一步 判断顺序表是否为空
    if (L.length > 0) {
        cout << "当前顺序表一共有" << L.length << "个元素,分别是:" << endl;
        for (int i = 1; i <= L.length; i++) {
            cout << *p << endl;
            *p++;//地址往后移一位
        }
    }
    else {
        cout << "当前顺序表为空" << endl;
    }
    return OK;
}
// 取值
Status GetElem(Sqlist L, int i,Elemtype &e) {
    //判断i是否合法
    if (i<1 || i>L.length) return ERROR;
    e = L.elem[i - 1];
    return OK;
}
// 查找
int LocateList(Sqlist L, Elemtype e) {
    // 在顺序表中查找值为e的数据元素,并返回其序号
    for (int i = 0; i < L.length; i++) {
        if (L.elem[i] == e) return i + 1;
    }
    return 0;
}
// 删除
Status DeleteList(Sqlist &L, int i) {
    // 在顺序表中删除第i个元素
    // 判断i值是否合法
    if (i<1 || i>L.length) return ERROR;
    // 从第i+1个元素开始,数据元素往前移一位
    for (int j = i - 1; j < L.length-1; j++) {
        L.elem[j] = L.elem[j + 1];
    }
    --L.length;
}
int main() {
    Sqlist la;
    InitList(la);
    InsertList(la, 1, 3);
    InsertList(la, 1, 1);
    ListTraverse(la);
    DeleteList(la, 1);
    ListTraverse(la);
    system("pause");
    return 0;
}