zoukankan      html  css  js  c++  java
  • 链式队列

    队列结构

    
    
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #define OK 1;
     5 #define False -1;
     6 //结点结构
     7 typedef struct QNode
     8 {
     9     char date;
    10     struct QNode *next;
    11 }QNode;
    12 //链式队列结构
    13 typedef struct Flag
    14 {
    15      QNode *front;
    16     QNode *rear;
    17 }Flag;
    
    

    队列初始化

     1 //初始化
     2 int InitQueue (Flag *q)
     3 {
     4     q->front=q->rear=(QNode *)malloc(1*sizeof(QNode));
     5     if(!q->front)
     6     {
     7         exit(0);
     8     }
     9     q->front->next=NULL;
    10     return OK;
    11 }

    入队

     1 //入队
     2 int CreateQueue(Flag *q,char e)
     3 {
     4      QNode *p;
     5      p=(QNode *)malloc(1*sizeof(QNode));
     6      if(!p)
     7      {
     8          exit(0);
     9      }
    10      p->date=e;
    11      p->next=NULL;
    12      
    13      q->rear->next=p;//尾插法,第一个元素位于首元节点位置,front相当于头节点,不存数
    14      q->rear=p;//队尾变更
    15      return OK;
    16 }

    打印

     1 //打印
     2 int PrintQueue(Flag *q)
     3 {
     4     QNode *pMove;
     5     pMove=q->front->next;//易错,注意刚开始遍历的地方类似于链表中的首元结点,此处的定位有一层嵌套
     6     while(pMove!=NULL)
     7     {
     8         printf("%c",pMove->date);
     9         pMove=pMove->next;
    10     }
    11     return OK;
    12 }

    判空

    1 //判空
    2 int Empty(Flag *q)
    3 {
    4     if(q->front==q->rear)
    5         return OK;
    6}

    出栈并销毁

     1 //出栈+销毁
     2 int DeleteQueue(Flag *q,int a)//出栈
     3 {
     4     
     5     QNode *w;
     6     w=q->front->next;//相当于将首元的地址和数值(间接)一起传给w
     7     
     8     q->front->next=w->next;
     9     if(a==1)
    10     printf("
    出队一个元素:%c",w->date);
    11     if( q->rear == w)//当只剩一个元素的处理
    12         q->rear = q->front;
    13     free(w);
    14     return OK;
    15 }

    主函数测试

     1 //出栈+销毁
     2 int DeleteQueue(Flag *q,int a)//出栈
     3 {
     4     
     5     QNode *w;
     6     w=q->front->next;//相当于将首元的地址和数值(间接)一起传给w
     7     
     8     q->front->next=w->next;
     9     if(a==1)
    10     printf("
    出队一个元素:%c",w->date);
    11     if( q->rear == w)
    12         q->rear = q->front;
    13     free(w);
    14     return OK;
    15 }

  • 相关阅读:
    ABAP 销售范围
    C语言深度剖析自测题8解析
    Ubutun13.10下安装fcitx
    各种Web服务器与Nginx的对比
    Hadoop2.2.0在Ubuntu编译失败解决方法
    网站上在给出邮箱地址时不直接使用@符号的原因
    IPython notebook在浏览器中显示不正常的问题及解决方法
    input只读效果
    阿里实习生电面题目:输出给定字符串的全部连续子串
    DNS 放大
  • 原文地址:https://www.cnblogs.com/YOLO-in-the-sun/p/12901981.html
Copyright © 2011-2022 走看看