链表实现队列——————数据结构作业

版权声明:转载请注明出处 https://blog.csdn.net/Hpuer_Random/article/details/83043322

作业code2:

- 仿照作业code1的功能,将课本上链表的实现队列能完整实现
- 需要通过main函数调用并能进行友好的人机交互输入

作业code1

链表实现队列的代码:

#include<bits/stdc++.h>
#define OK 1
#define ERROR 0
using namespace std;
typedef int QElemType;
typedef int Status;
typedef int SElemType;
typedef struct QNode
{
        QElemType data;
        struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
        QueuePtr front;
        QueuePtr rear;
}LinkQueue;

LinkQueue q;
QueuePtr p;
Status InitQueue(LinkQueue &Q)
{
        Q.front = Q.rear = new QNode;
        Q.front->next = NULL;
        return OK;
}
Status EnQueue(LinkQueue &Q,QElemType &e)
{
        p = new QNode;
        p->data = e;
        p->next = NULL;
        Q.rear->next = p;
        Q.rear = p;
        return OK;
}

Status DeQueue(LinkQueue &Q,QElemType &e)
{
        if(Q.front == Q.rear)
                return ERROR;
        p = Q.front->next;
        e = p->data;
        Q.front->next = p->next;
        if(Q.rear == p)
                Q.rear = Q.front;
        delete p;
        return OK;
}

SElemType GetHead(LinkQueue Q)
{
        if(Q.front != Q.rear)
                return Q.front->next->data;
}
void menu()
{
        printf(
               "1.入队\n"\
               "2.出队\n"\
               "3.取队首\n"\
               "4.menu\n"
               "0.退出\n"\
               );
}

int main()
{
        menu();
        int e,choose;
        int k=0;
        InitQueue(q);
        while(true)
        {
                cout<<"请输入:";
                cin>>choose;
                switch(choose)
                {
                        case 1:
                                printf("请输入入队元素:");
                                cin>>e;
                                EnQueue(q,e);
                                if(q.front != q.rear)
                                {
                                        printf("队列:");
                                        for(QueuePtr i=q.front->next;i!=q.rear->next;i=i->next)
                                                printf("%d ",i->data);
                                }
                                printf("\n");
                                break;
                        case 2:
                                if(q.front == q.rear)
                                        printf("队列为空!\n");
                                else
                                {
                                        DeQueue(q,e);
                                        printf("出队元素是 %d\n",e);
                                }
                                if(q.front != q.rear)
                                {
                                        printf("队列:");
                                        for(QueuePtr i=q.front->next;i!=q.rear->next;i=i->next)
                                                printf("%d ",i->data);
                                }
                                printf("\n");
                                break;
                        case 3:
                                e=GetHead(q);
                                printf("队首元素是:%d\n",e);
                                break;
                        case 4:
                                menu();
                                break;
                        case 0:
                                k=1;
                                break;
                }
                if(k)   break;
        }
        return 0;
}


猜你喜欢

转载自blog.csdn.net/Hpuer_Random/article/details/83043322