实现链队列的初始化、入队和出队操作

编程实现链队列的初始化、入队和出队操作。

#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#define OK 1
#define OVERFLOW 2
#define ERROR -1
using namespace std;
typedef int QElemType;
typedef int Status ;
typedef struct QNode{
    QElemType data;
    struct QNode *next;
}QNode,*QueuePtr;
typedef struct {
    QueuePtr front;
    QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue &Q){
    Q.front = (QueuePtr)malloc(sizeof(QNode));
    Q.rear = (QueuePtr)malloc(sizeof(QNode));
    if(!Q.front)exit(OVERFLOW);
    Q.front = Q.rear;
    return OK;
}
Status InitStack(LinkQueue &Q){
    QueuePtr p;
    int e;
    cout << "请输入元素,以-2 结束" << endl;
    while(scanf("%d",&e) && e != -2){
        p=(QueuePtr)malloc(sizeof(QNode));
        p->data=e;
        p->next=NULL;
        Q.rear->next=p;
        Q.rear=p;
    }
    p=Q.front->next;
    while(p!=NULL)
    {
        cout << p->data << " ";
        p = p->next;
    }
    cout << endl;
    return OK;
}
void Test()
{
    cout << "所有操作如下:" << endl;
    cout << "(1)采用链式存储实现队列的初始化操作" << endl;
    cout << "(2)采用链式存储实现队列的入队操作" << endl;
    cout << "(3)采用链式存储实现队列的出队操作" << endl;
    cout << "(-1)退出" << endl;
    cout << "请选择:";
}
Status DeQueue(LinkQueue &Q){
    QueuePtr p;
    if(Q.front==Q.rear)
    {
        printf("队列为空!!!!!!!!\n");
        return ERROR;
    }
    p = Q.front->next;
    cout << p->data << endl;
    Q.front -> next = p -> next;
    if(Q.rear == p)Q.rear = Q.front;
    free(p);
    return OK;
}
Status EnQueue(LinkQueue &Q){
    QueuePtr p;
    p = (QueuePtr)malloc(sizeof(QNode));
    if(!p)exit(OVERFLOW);
    cout << "请输入要入队的元素:" << endl;
    cin >> p->data;
    Q.rear -> next = p;
    p -> next = NULL;
    Q.rear = p;
    return OK;
}
int main()
{
    LinkQueue q;
    InitQueue(q);
    int m;
    do {
        Test();
        cin >> m;
        switch(m){
            case 1:
                InitStack(q);
                break;
            case 2:
                EnQueue(q);
                break;
            case 3:
                DeQueue(q);
                break;
        }
    }while(m!=-1);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/ancientear/article/details/80191205