队列的初始化、入队和出队操作"/>
实现链队列的初始化、入队和出队操作
编程实现链队列的初始化、入队和出队操作。
#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;
}
更多推荐
实现链队列的初始化、入队和出队操作
发布评论