C++ 实现顺序表求前驱和后继功能

本代码使用 C++ 语言实现顺序表的求前驱和求后继功能,并提供菜单界面进行操作。代码采用类型重定义,方便修改数据元素类型。测试用例涵盖合法和不合法情况。

#include <iostream>
using namespace std;

// 数据元素的类型定义
typedef int ElementType;

// 顺序表结构体定义
const int MaxSize = 100;  // 最大容量
struct SeqList {
    ElementType data[MaxSize];  // 数据元素数组
    int length;  // 当前长度
};

// 初始化顺序表
void init(SeqList& list) {
    list.length = 0;
}

// 插入元素到顺序表
bool insert(SeqList& list, int pos, ElementType elem) {
    if (pos < 1 || pos > list.length + 1 || list.length == MaxSize) {
        return false;  // 插入位置不合法或顺序表已满,插入失败
    }

    // 将插入位置后的元素后移
    for (int i = list.length; i >= pos; i--) {
        list.data[i] = list.data[i - 1];
    }

    list.data[pos - 1] = elem;  // 插入新元素
    list.length++;  // 长度加1
    return true;  // 插入成功
}

// 求前驱元素
bool getPredecessor(SeqList list, ElementType elem, ElementType& predecessor) {
    for (int i = 1; i < list.length; i++) {
        if (list.data[i] == elem) {
            predecessor = list.data[i - 1];  // 找到前驱元素
            return true;
        }
    }
    return false;  // 未找到元素或元素为第一个,无前驱
}

// 求后继元素
bool getSuccessor(SeqList list, ElementType elem, ElementType& successor) {
    for (int i = 0; i < list.length - 1; i++) {
        if (list.data[i] == elem) {
            successor = list.data[i + 1];  // 找到后继元素
            return true;
        }
    }
    return false;  // 未找到元素或元素为最后一个,无后继
}

// 打印顺序表元素
void print(SeqList list) {
    for (int i = 0; i < list.length; i++) {
        cout << list.data[i] << ' '; 
    }
    cout << endl;
}

// 显示菜单
void displayMenu() {
    cout << '1---插入元素到顺序表' << endl;
    cout << '2---求元素的前驱' << endl;
    cout << '3---求元素的后继' << endl;
    cout << '4---打印顺序表元素' << endl;
    cout << '0---退出' << endl;
}

int main() {
    SeqList list;
    init(list);
    int choice;
    
    while (true) {
        displayMenu();
        cout << '请输入选择:';
        cin >> choice;
        
        if (choice == 1) {
            int pos, elem;
            cout << '请输入要插入的位置和元素值:';
            cin >> pos >> elem;
            
            if (insert(list, pos, elem)) {
                cout << '插入成功!' << endl;
            } else {
                cout << '插入失败!' << endl;
            }
        } else if (choice == 2) {
            ElementType elem, predecessor;
            cout << '请输入要求前驱的元素值:';
            cin >> elem;
            
            if (getPredecessor(list, elem, predecessor)) {
                cout << '前驱元素为:' << predecessor << endl;
            } else {
                cout << '未找到前驱元素或该元素为第一个元素!' << endl;
            }
        } else if (choice == 3) {
            ElementType elem, successor;
            cout << '请输入要求后继的元素值:';
            cin >> elem;
            
            if (getSuccessor(list, elem, successor)) {
                cout << '后继元素为:' << successor << endl;
            } else {
                cout << '未找到后继元素或该元素为最后一个元素!' << endl;
            }
        } else if (choice == 4) {
            cout << '顺序表元素为:';
            print(list);
        } else {
            break;
        }
    }
    
    return 0;
}

以上代码实现了顺序表的插入、求前驱、求后继和打印功能,并提供了菜单供用户选择。通过菜单选择不同的操作,可以进行相应的功能操作。请根据实际需求使用该代码,并按照菜单提示进行操作和测试。

希望这可以解决您的问题!如果还有其他疑问,请随时提问。

C++ 实现顺序表求前驱和后继功能

原文地址: https://www.cveoy.top/t/topic/bpTT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录