队列,链队列,循环队列

来源:互联网 发布:a5淘宝客论坛 编辑:程序博客网 时间:2024/05/11 23:08

队列:当然用c++

#include<bits/stdc++.h>int main(){    std::queue<int> q;int x;    while(scanf("%d",&x),x) q.push(x);    std::cout<<q.size()<<"\n";    while(!q.empty()) std::cout<<q.front()<<'\n',q.pop();    return 0;}

链队列:c语言实现

#include<bits/stdc++.h>using namespace std;typedef int QElemType;typedef struct node{    QElemType data;    struct node *next;}QNode,*QueuePtr;typedef struct{    QueuePtr front;    QueuePtr rear;}LinkQueue;void InitQueue(LinkQueue &Q)//初始化队列{    Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));//先申请内存    if(!Q.front) exit(0);    Q.front->next=NULL;//下一个节点为空}void DestoryQueue(LinkQueue &Q)//销毁队列{    while(Q.front)//循环销毁    {        Q.rear=Q.front->next;        free(Q.front);        Q.front=Q.rear;    }}void EnQueue(LinkQueue &Q,QElemType e)//插入队尾元素{    QNode *p;    p=(QueuePtr)malloc(sizeof(QNode));    if(!p) exit(0);    p->data=e;    p->next=NULL;    Q.rear->next=p;//自己画图理解    Q.rear=p;}QElemType DeQueue(LinkQueue &Q){    QElemType e;    QNode *p;    if(Q.front==Q.rear) exit(0);    p=Q.front->next;    e=p->data;    Q.front->next=p->next;    if(Q.rear==p) Q.rear=Q.front;    free(p);    return e;}bool QueueEmpty(LinkQueue &Q){    if(Q.front==Q.rear) return true;    else return false;}int main(){    LinkQueue Q;    InitQueue(Q);    int x;    while(scanf("%d",&x),x) EnQueue(Q,x);    while(!QueueEmpty(Q)) cout<<DeQueue(Q)<<endl;    return 0;}

循环队列

#include<bits/stdc++.h>using namespace std;#define MAXQSIZE 100typedef int QElemType;typedef struct{    QElemType *base;    int front;    int rear;}SqQueue;void InitQueue(SqQueue &Q){    Q.base=(QElemType *)malloc(MAXQSIZE * sizeof(QElemType));    if(!Q.base) exit(0);    Q.front=Q.rear=0;}int QueueLength(SqQueue Q){    return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;}void EnQueue(SqQueue &Q,QElemType e){    if((Q.rear+1)%MAXQSIZE==Q.front) exit(0);    Q.base[Q.rear]=e;    Q.rear=(Q.rear+1)%MAXQSIZE;}int DeQueue(SqQueue &Q){    QElemType e;    if(Q.front==Q.rear) exit(0);    e=Q.base[Q.front];    Q.front=(Q.front+1)%MAXQSIZE;    return e;}bool QueueEmpty(SqQueue Q){    if(Q.front==Q.rear) return true;    else return false;}int main(){    SqQueue Q;    InitQueue(Q);    QElemType x;    while(scanf("%d",&x),x) EnQueue(Q,x);    cout<<QueueLength(Q)<<endl;    return 0;}
0 0