zoukankan      html  css  js  c++  java
  • c语言编程之循环队列

            利用链表实现的循环队列,完成了队列的入队和出队,对于队空和队满用了一个flag进行标记。入队flag++,出队flag--

      1 #include"stdio.h"
      2 
      3 typedef int element;
      4 
      5 typedef struct Node{
      6         struct Node *next;
      7         element data;
      8 }*pNode;
      9 
     10 typedef struct QNode{
     11         pNode front,rear;
     12         element flag;
     13 }*Linknode;
     14 
     15 //init a empty queue
     16 element Init_queue(Linknode *pLinknode)
     17         {
     18            Linknode P;
     19            P=*pLinknode;
     20            P->front=P->rear=(pNode)malloc(sizeof(struct Node));
     21            P->front->next=NULL;
     22            P->rear->next=P->front;     // make loop queue font linked rear,in usuall queue this is P->rear->next=NULL;make a change become 
    //Loop queue;
    23 P->flag=0; 24 } 25 26 //add a data to queue rear 27 element Add_queue(Linknode *pLinknode,int num) 28 { 29 Linknode P; 30 P=*pLinknode; 31 pNode s=(pNode)malloc(sizeof(struct Node)); 32 s->data=num; 33 s->next=P->front; //in this position we can see the new add memory s is point to front,in usuall queue we can see s->next=NULL;
     34           P->rear->next=s;
     35           P->rear=s;                   
     36           ++P->flag;
     37           printf("add data:%d add flag:%d
    ",P->rear->data,P->flag);
     38         }
     42         {
     43           if((*pLinknode)->flag==0)
     44                 {
     45                   printf("queue is empty
    ");
     46                   return 0;
     47                 }
     48           //if(((*pLinknode)->front)==((*pLinknode)->rear))
     49           //    {
     50           //            printf("queue is empty!!");
     51           //            return 0;
     52           //      }
     53           Linknode P;
     54           pNode k;
     55           P=*pLinknode;
     56           k=P->front->next;
     57           P->front->next=k->next;
     58           printf("delet data:%d
    ",k->data);
     59           //--P->flag;
     60           free(k);
     61           printf("delete flag:%d
    ",P->flag);
     62           --P->flag;
     63           return 0;
     64         }
     65 
     66 element Print_queue(Linknode pLinknode)
     67         {
     68           pNode p;
     69           p=pLinknode->front;
     71           while(p!=pLinknode->rear&&pLinknode->flag)    //it is importand,because in loop queue fornt==rear can means empty or full,it is a                                                  //loop,we can't determin this loop queue is empty by using front==rear,must add num as flag;
     72                 {
     73                   p=p->next;
     74                   printf("data:%d
    ",p->data);
     75                 }
     76           return 0;
     77         }
     78 element main()
     79         {
     80           Linknode pQnode;
     81           pQnode=(Linknode)malloc(sizeof(struct QNode));
     82           Init_queue(&pQnode);
     83           Add_queue(&pQnode,99);
     84           Add_queue(&pQnode,11);
     85           Add_queue(&pQnode,22);
     86           Add_queue(&pQnode,33);
     87           Add_queue(&pQnode,44);
     88           Add_queue(&pQnode,55);
     89           Print_queue(pQnode);
     90           Delet_queue(&pQnode);
     91           Delet_queue(&pQnode);
     92           Delet_queue(&pQnode);
     93           Delet_queue(&pQnode);
     94           Delet_queue(&pQnode);
     95           Delet_queue(&pQnode);
     96           Delet_queue(&pQnode);
     97           Print_queue(pQnode);
     98           return 0;
     99         }
    100 
  • 相关阅读:
    Linux基础命令题(ps/ls + grep)
    Operator Overloading in C++
    C++中class和struct的区别
    poj1110double vision搜索
    poj1321棋盘递归搜索
    vim窗口分割/切换
    xclipmore about copy&paste命令行粘贴
    [转载]怎样花两年时间去面试一个人
    最优二叉查找树optimalBSTC++实现
    vim复制粘贴——系统剪贴板
  • 原文地址:https://www.cnblogs.com/qiuheng/p/5783996.html
Copyright © 2011-2022 走看看