链队列的创建,入队,出队操作
内容很简单,上代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef int QElemtype;
typedef struct QNode{
QElemtype data;
struct QNode *Next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr flont;
QueuePtr rear;
}LinkQueue;
void InitQueue(LinkQueue &Q){
Q.rear = (QueuePtr)malloc(sizeof(QNode));//队列头结点
if(!Q.rear) {
printf("队列初始化失败!\n");
return;
}
Q.flont = Q.rear;
Q.rear->Next = NULL;
printf("队列初始化成功!\n");
}
void EnQueue(LinkQueue &Q,QElemtype e){
QueuePtr s = (QueuePtr)malloc(sizeof(QNode));
if(!s) {
printf("内存分配失败!\n");
return;
}
s->data = e;
s->Next = Q.rear->Next;
Q.rear->Next = s;
Q.rear = s;
printf("入队操作成功!\n");
}
void DeQueue(LinkQueue &Q,QElemtype &e){//用e来保存出队元素
if(Q.flont==Q.rear) {
printf("队列为空,出队操作失败!\n");
return;
}
QueuePtr p = Q.flont->Next;
e = p->data;
Q.flont->Next = p->Next;
if(p==Q.rear) Q.rear = Q.flont;
free(p);
printf("出队成功!\n");
printf("出队元素为:%d\n",e);
}
int main(){
LinkQueue Q;
InitQueue(Q);
printf("1 入队 ,2 出队 ,按其他结束\n");
int c,e;
while(1){
printf("请输入接下来要进行的操作:\n");
scanf("%d",&c);
if(c==1) {
printf("请输入入队的元素:\n");
scanf("%d",&e);
EnQueue(Q,e);
}
else if(c==2){
DeQueue(Q,e);
}
else break;
}
}
测试结果