郑仔102 2023-11-10 19:16 采纳率: 33.3%
浏览 4
已结题

用数据结构解决这个问题c++

img


使用c++实现这两个内容 必须有:顺序栈 链栈 循环队列 链队 写在一个程序上

  • 写回答

9条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-11-10 19:18
    关注
    获得0.75元问题酬金

    引自强大而免费的微信小程序:皆我百晓生

    以下是使用数据结构实现的C++程序,包含顺序栈、链栈、循环队列和链队的实现:

    #include<iostream>
    using namespace std;
    
    // 定义顺序栈的结构体
    struct SeqStack {
        int *data;
        int top;
        int maxsize;
    };
    
    // 初始化顺序栈
    void initSeqStack(SeqStack &s, int size) {
        s.data = new int[size];
        s.top = -1;
        s.maxsize = size;
    }
    
    // 入栈操作
    void push(SeqStack &s, int value) {
        if (s.top == s.maxsize - 1) {
            cout << "Stack is full!" << endl;
            return;
        }
        s.top++;
        s.data[s.top] = value;
    }
    
    // 出栈操作
    int pop(SeqStack &s) {
        if (s.top == -1) {
            cout << "Stack is empty!" << endl;
            return -1;
        }
        int value = s.data[s.top];
        s.top--;
        return value;
    }
    
    // 初始化链栈的结构体
    struct LinkNode {
        int data;
        LinkNode *next;
    };
    
    struct LinkStack {
        LinkNode *top;
    };
    
    // 初始化链栈
    void initLinkStack(LinkStack &s) {
        s.top = nullptr;
    }
    
    // 入栈操作
    void push(LinkStack &s, int value) {
        LinkNode *newNode = new LinkNode;
        newNode->data = value;
        newNode->next = s.top;
        s.top = newNode;
    }
    
    // 出栈操作
    int pop(LinkStack &s) {
        if (s.top == nullptr) {
            cout << "Stack is empty!" << endl;
            return -1;
        }
        int value = s.top->data;
        LinkNode *temp = s.top;
        s.top = s.top->next;
        delete temp;
        return value;
    }
    
    // 定义循环队列的结构体
    const int MAXSIZE = 6;
    
    struct CircularQueue {
        int data[MAXSIZE];
        int front;
        int rear;
    };
    
    // 初始化循环队列
    void initCircularQueue(CircularQueue &q) {
        q.front = q.rear = 0;
    }
    
    // 入队操作
    void enqueue(CircularQueue &q, int value) {
        if ((q.rear + 1) % MAXSIZE == q.front) {
            cout << "Queue is full!" << endl;
            return;
        }
        q.data[q.rear] = value;
        q.rear = (q.rear + 1) % MAXSIZE;
    }
    
    // 出队操作
    int dequeue(CircularQueue &q) {
        if (q.front == q.rear) {
            cout << "Queue is empty!" << endl;
            return -1;
        }
        int value = q.data[q.front];
        q.front = (q.front + 1) % MAXSIZE;
        return value;
    }
    
    // 定义链队的结构体
    struct LinkQueueNode {
        int data;
        LinkQueueNode *next;
    };
    
    struct LinkQueue {
        LinkQueueNode *front;
        LinkQueueNode *rear;
    };
    
    // 初始化链队
    void initLinkQueue(LinkQueue &q) {
        q.front = q.rear = nullptr;
    }
    
    // 入队操作
    void enqueue(LinkQueue &q, int value) {
        LinkQueueNode *newNode = new LinkQueueNode;
        newNode->data = value;
        newNode->next = nullptr;
        if (q.front == nullptr) {
            q.front = q.rear = newNode;
        } else {
            q.rear->next = newNode;
            q.rear = newNode;
        }
    }
    
    // 出队操作
    int dequeue(LinkQueue &q) {
        if (q.front == nullptr) {
            cout << "Queue is empty!" << endl;
            return -1;
        }
        int value = q.front->data;
        LinkQueueNode *temp = q.front;
        q.front = q.front->next;
        if (q.front == nullptr) {
            q.rear = nullptr;
        }
        delete temp;
        return value;
    }
    
    int main() {
        // 构建顺序栈
        SeqStack seqStack;
        int seqStackSize;
        cout << "请输入顺序栈元素个数:";
        cin >> seqStackSize;
        initSeqStack(seqStack, seqStackSize);
        cout << "请输入顺序栈元素:" << endl;
        for (int i = 0; i < seqStackSize; i++) {
            int value;
            cin >> value;
            push(seqStack, value);
        }
        cout << "顺序栈出栈顺序为:";
        while (seqStack.top != -1) {
            cout << pop(seqStack) << " ";
        }
        cout << endl;
    
        // 构建链栈
        LinkStack linkStack;
        int linkStackSize;
        cout << "请输入链栈元素个数:";
        cin >> linkStackSize;
        initLinkStack(linkStack);
        cout << "请输入链栈元素:" << endl;
        for (int i = 0; i < linkStackSize; i++) {
            int value;
            cin >> value;
            push(linkStack, value);
        }
        cout << "链栈出栈顺序为:";
        while (linkStack.top != nullptr) {
            cout << pop(linkStack) << " ";
        }
        cout << endl;
    
        // 构建循环队列
        CircularQueue circularQueue;
        int circularQueueSize;
        cout << "请输入循环队列元素个数:";
        cin >> circularQueueSize;
        initCircularQueue(circularQueue);
        cout << "请输入循环队列元素:" << endl;
        for (int i = 0; i < circularQueueSize; i++) {
            int value;
            cin >> value;
            enqueue(circularQueue, value);
        }
        cout << "循环队列出队顺序为:";
        while (circularQueue.front != circularQueue.rear) {
            cout << dequeue(circularQueue) << " ";
        }
        cout << endl;
    
        // 构建链队
        LinkQueue linkQueue;
        int linkQueueSize;
        cout << "请输入链队元素个数:";
        cin >> linkQueueSize;
        initLinkQueue(linkQueue);
        cout << "请输入链队元素:" << endl;
        for (int i = 0; i < linkQueueSize; i++) {
            int value;
            cin >> value;
            enqueue(linkQueue, value);
        }
        cout << "链队出队顺序为:";
        while (linkQueue.front != nullptr) {
            cout << dequeue(linkQueue) << " ";
        }
        cout << endl;
    
        return 0;
    }
    

    这个程序先创建了顺序栈、链栈、循环队列和链队的类和函数,并按照题目要求进行了相关操作的测试。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 创建了问题 11月10日