首页 > 技术文章 > 数据结构—顺序表的基本操作

wangshx666 2021-05-24 23:39 原文

#include<iostream>
using namespace std;

#define MaxSize 10

typedef struct SqList {
    int data[MaxSize];
    int length;
}SqList;

// 初始化一个顺序表
void InitList(SqList &L)
{
    for (int i=0; i<MaxSize; i++)
        L.data[i] = 0;
    L.length = 0;
}

// 在顺序表的第i个位置插入元素e
bool ListInsert(SqList &L, int i, int e)
{
    if (i<1 || i>L.length+1)    // 判断i的范围是否有效
        return false;
    if (L.length >= MaxSize)    // 当前存储空间已满,不能插入
        return false;
    for (int j=L.length; j>=i; j--)  // 将第i个元素及以后的元素后移
        L.data[j] = L.data[j-1];  
    L.data[i-1] = e;                // 在位置i放入元素e
    L.length ++;                    // 长度加·1
    return true;
}

// 在顺序表的第i个位置插入元素e
bool ListDelete(SqList &L, int i, int &e)
{
    if (i<1 || i>L.length)  // 判断i的范围是否有效
        return false;
    e = L.data[i-1];        // 将被删除的元素赋值给e 
    for (int j=i; j<L.length; j++)  // 将第i个位置后的元素前移
        L.data[j-1] = L.data[j];  
    L.length --;                    // 长度加·1
    return true;
}

// 按位置查找元素, 返回元素值
int GetElem(SqList L, int i)
{    
    if (i<1 || i>L.length)  // 判断i的范围是否有效
        return 0;
    return L.data[i-1];
}

// 按值查找元素,返回元素的位置
int LocElem(SqList L, int e)
{
    for (int i=0; i<L.length; i++)
        if (L.data[i] == e)
            return i+1;
    return 0;
}

int main()
{
    SqList L;
    InitList(L);       // 初始化
    ListInsert(L,1,1); // 插入元素
    ListInsert(L,2,2); // 插入元素
    ListInsert(L,3,3); // 插入元素
    int e = -1;
    ListDelete(L,2,e); // 删除元素
    cout << "delete element: " << e << endl;

    int a = GetElem(L, i); // 按位置查找元素
    int b = LocElem(L, e); // 按值查找元素

    for (int i=0; i<L.length; i++)
        cout << "data[" << i << "]=" << L.data[i] << endl;
    return 0;
}

推荐阅读