双向队列

    xiaoxiao2026-01-01  8

    #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct node {     int data;     node *next; }*qtype; typedef struct {     qtype front,rear; }que; int QueInit(que &q)     //初始化一个队列 {     q.front=q.rear=(qtype)malloc(sizeof(node));     q.front->next=NULL;     return 1; } void DesQue(que &q) {     while(q.front)     {         q.rear=q.front->next;         free(q.front);         q.front=q.rear;     } } int InQuer(que &q,int e)   //在队列右端插入 {     qtype p;     p=(qtype)malloc(sizeof(node));     p->data=e;p->next=NULL;     q.rear->next=p; q.rear=p;     return 1; } int InQuel(que &q,int e)   //在队列左端插入 {     qtype p1,p2;     p1=(qtype)malloc(sizeof(node));     p1->data=e; //    if(q.front==q.rear) q.front->next=NULL;     p1->next=q.front->next;     q.front->next=p1;     p2=q.front;     while(p2->next)     {         p2=p2->next;     }     q.rear=p2; } int DelQuer(que &q)    //右边删除 {     qtype p1,p2;     if(q.front==q.rear) return 0;     p2=q.front;     while(p2->next!=q.rear) //p2指向队尾的前一个元素     {         p2=p2->next;     }     p1=p2->next;     p2->next=p1->next;     q.rear=p2;     free(p1);     return 1; } int DelQuel(que &q)         //左边删除 {     qtype p;     if(q.front==q.rear) return 0;     //若队列为空,返回0     p=q.front->next;     q.front->next=p->next;     if(q.rear==p) q.rear=q.front;     //若是最后一个元素,使尾指针指向头结点     free(p);     return 1; } int main() {     que q;     QueInit(q);     int m,i,x,a[12000];     int j=0;     char c[10];     scanf("%d",&m);     for(i=1;i<=m;i++)     {         scanf("%s",c);         if(strcmp(c,"LIN")==0)         {             scanf("%d",&x);             InQuel(q,x);         }         if(strcmp(c,"RIN")==0)         {             scanf("%d",&x);             InQuer(q,x);         }         if(strcmp(c,"LOUT")==0)         {             if(q.front==q.rear)                 a[j++]=i;             else DelQuel(q);         }         if(strcmp(c,"ROUT")==0)         {             if(q.front==q.rear)                 a[j++]=i;             else DelQuer(q);         }     }// for     qtype p;     p=q.front->next;     while(p)     {         if(p->next)             printf("%d ",p->data);         else             printf("%d\n",p->data);         p=p->next;     }     if(j)     {         for(i=0;i<j;i++)             printf("%d ERROR\n",a[i]);     }     return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1305549.html
    最新回复(0)