Loading

数据结构_线性表之顺序表(1)

基本简单的顺序表操作

#include <iostream>
using namespace std;
#define Maxsize 3
//顺序表结构 C方式
typedef struct SqList_C {

    int data[Maxsize];//线性表最大长度,大小已定,不用申请内存,直接用
    int length;//记录线性表当前长度

}SqList_C;
//顺序线性表结构 C++方式
typedef struct SqList {
    
    int *data;//线性表最大长度
    int length;//记录线性表当前长度

}SqList;


//(1)初始化顺序表 C++方式 使用C++引用符号初始化顺序表
int InitSqList(SqList &L);
//(1)初始化顺序表 C方式 使用指针方式初始化顺序表
int InitSqList_C(SqList *L);
//(2)清空顺序表
int ClearSqList(SqList &L);
//(3)获取表长 参数SqList类型变量
int GetLength(SqList &L);
//(4)判断是否表空 参数SqList类型变量
int EmptyList(SqList L);
//(5)按位查找元素 查找第i个位置的元素
int GetElem(SqList L,int i);
//(6)按值查找元素 查找值为e的元素
int LocateElem(SqList L, int e);
//(7)顺序表插入元素操作
int SqListInsert(SqList &L, int i, int e);
//(8)顺序表删除元素操作
int SqListDelete(SqList &L, int i,int &e);
//(9)打印一个顺序表 参数SqList类型变量
void PrintList(SqList L);
int main() {
    //测试数据开始**************
    SqList L;
    InitSqList(L);
    SqListInsert(L, 1, 5);
    SqListInsert(L, 1, 15);
    SqListInsert(L, 1, 25);
    //SqListInsert(L, 1, 25);
    PrintList(L);
    ClearSqList(L);
    SqListInsert(L, 1, 25);
    SqListInsert(L, 1, 35);
SqListDelete(L, 2, e); PrintList(L);
//测试数据结束************** return 0; } //1.C++初始化线性表 int InitSqList(SqList &L) { L.data = new int[Maxsize];//申请内存 L.length = 0;//初始化一个空表 cout << "初始化成功!" << endl; return 1; } //1.C语言初始化线性表 int InitSqList_C(SqList L) { //L.data = (int *)malloc(sizeof(int)*Maxsize); L.length = 0; return 1; } //2.清空顺序表 int ClearSqList(SqList &L) { L.length = 0; cout << "表已清空!" << endl; return 1; } //3.获取表长 int GetLength(SqList L) { cout << "表长为:"<<L.length << endl; return L.length; } //4.判断表是否为空 int EmptyList(SqList L) { if (L.length == 0) { cout << "表空!" << endl; return 1; } else { cout << "表不为空!" << endl; return 0; } } //5.按位查找元素 int GetElem(SqList L, int i) { if (i<1 || i>L.length) return 0; cout << "你查找的元素为:"<<L.data[i-1] << endl; return L.data[i - 1]; } //6.按值查找元素 int LocateElem(SqList L, int e) { int i; for (i = 0; i < L.length; i++) { if (L.data[i] == e) { cout << "你查找的元素:"<<e<<"已找到,位置为第" <<i+1<<""<< endl; return i+1; } } return 0; } //7.顺序表插入元素 int SqListInsert(SqList &L, int i, int e) { //本算法实现元素插入,元素为传入的e,插入位置为i int k; //若线性表达到最大 if (L.length == Maxsize) { cout << "the list is full!" << endl; return 0; } //若插入的位置不合法 if (i<1 || i>L.length + 1) { cout << "位置错误!" << endl; return 0; } //若插入的位置不在表尾 if (i <= L.length) { for (k = L.length - 1; k >= i - 1; k--) { L.data[k + 1] = L.data[k];//数据后移一位 } } //新元素插入 L.data[i - 1] = e; //表长度加一 L.length++; return 1; } //8.顺序表删除元素操作 int SqListDelete(SqList &L, int i,int &e) { //本算法实现元素删除,删除的元素的位置为i if (i<1 || i>L.length) { cout << "位置错误!" << endl; return 0; } for (int k = i; k < L.length; k++) { L.data[k - 1] = L.data[k];//从删除的位置开始,后一个覆盖前一个 }

    e = L.data[i - 1];
    cout << "删除的元素为"<<e<< endl;

   L.length--;

return 1;
}
//9.打印顺序表
void PrintList(SqList L) {
    if (L.length != 0) {
        cout << "开始打印线性表:" << endl;
        for (int i = 0; i < L.length; i++) {
            cout << "" << i + 1 << "个元素是:" << L.data[i] << endl;
        }
        cout << "打印线性表任务完成!" << endl;
    }
    else {
        cout << "表空!" << endl;
    }

}

 

posted @ 2020-08-10 21:15  兜里还剩五块出头  阅读(140)  评论(0编辑  收藏  举报