• 链式队列


    队列结构

    
    
     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 }

  • 相关阅读:
    线程&进程
    C#入门基础
    .Net GC垃圾收集机制(下)
    .Net GC垃圾收集机制(上)
    GAC的理解及其作用
    C# DES加密,KEY和IV不同设置的写法
    常见加密算法简析
    密码学
    数字签名是什么?(数字证书)
    加密算法和MD5等散列算法的区别
  • 原文地址:https://www.cnblogs.com/YOLO-in-the-sun/p/12901981.html
Copyright © 2020-2023  润新知