zoukankan      html  css  js  c++  java
  • 队列操作

    1、设计节点:

    1 typedef struct Node{
    2     int data;
    3     struct Node *next;
    4 }Node,*Queue;  //节点结构
    5 
    6 typedef struct{
    7     Queue front;//队头
    8     Queue rear;//队尾
    9 }LinkQueue;

    2.初始化队列

    void initQueue(LinkQueue *queue)
    {
        queue->front = queue->rear=(Queue)malloc(sizeof(struct Node));//为队头和队尾节点分配内存
        if(queue->front==NULL)
        {
            exit(0);
        }
        queue->rear->next=NULL;//让队尾的下个节点为空
    }

    3、判断队列是否为空

    bool Isempty(LinkQueue queue)
    {
        return queue.front==queue.rear?true:false;//就是判断队头和队尾是否相等
    }

    4、入队操作

    void insertQueue(LinkQueue *queue,int value)//因为不是循环队列所以不需要判断是否满
    {
          /*初始化新节点*/ Queue q
    = (Queue)malloc(sizeof(struct Node)); if(q==NULL) exit(0); q->data=value; q->next=NULL;
        /*尾部插入节点*/ queue
    ->rear->next=q; queue->rear = q; }

    5、出队操作

     1 void deleteQueue(LinkQueue *queue)
     2 {
     3     Queue q = NULL;
        /*不为空则节点头部出队*/
    4 if(!Isempty(*queue)) 5 { 6 q=queue->front->next; 7 queue->front->next=q->next; 8 }
        /*只剩队头一个元素时,将队头赋值给队尾*/
    9 if(queue->rear ==q) 10 { 11 queue->rear = queue->front; 13 } 14 free(q); 16 }

    6、队列的遍历

     1 void traversal(LinkQueue queue)//头部开始遍历
     2 {
     3     int i = 1;
     4     Queue q=queue.front->next;
      /*q指针向队尾移动遍历,得到队列中存放的value*/
    5 while(q!=NULL) 6 { 7 printf("i= %d,data = %d ",i,q->data); 8 q = q->next; 9 i++; 10 11 } 12 }

    7、队列的销毁

     1 void destoryQueue(LinkQueue *queue)
     2 {
     3     while(queue->front != NULL)
     4     {
        /*front和rear一前一后,不断释放前一个指针,然后将后一个指针赋值给前一指针*/
    5 queue->rear = queue->front->next; 6 free(queue->front); 7 queue->front = queue->rear; 8 9 } 10 printf("destoried! "); 11 12 }

    完整代码:

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<stdbool.h>
      4 typedef struct Node{
      5     int data;
      6     struct Node *next;
      7 }Node,*Queue;
      8 
      9 typedef struct{
     10     Queue front;
     11     Queue rear;
     12 }LinkQueue;
     13 
     14 void initQueue(LinkQueue *queue)
     15 {
     16     queue->front = queue->rear=(Queue)malloc(sizeof(struct Node));
     17     if(queue->front==NULL)
     18     {
     19         exit(0);
     20     }
     21     queue->rear->next=NULL;
     22 
     23 }
     24 bool Isempty(LinkQueue queue)
     25 {
     26     return queue.front==queue.rear?true:false;
     27 }
     28 
     29 void insertQueue(LinkQueue *queue,int value)
     30 {
     31     Queue q = (Queue)malloc(sizeof(struct Node));
     32     if(q==NULL)
     33     exit(0);
     34     q->data=value;
     35     q->next=NULL;
     36     queue->rear->next=q;
     37     queue->rear = q;
     38 }
     39 
     40 void deleteQueue(LinkQueue *queue)
     41 {
     42     Queue q = NULL;
     43     if(!Isempty(*queue))
     44     {
     45         q=queue->front->next;
     46         queue->front->next=q->next;
     47     }
     48     if(queue->rear ==q)
     49     {
     50     queue->rear = queue->front;
     51 
     52     }
     53     free(q);
     54 
     55 }
     56 
     57 void traversal(LinkQueue queue)
     58 {
     59     int i = 1;
     60     Queue q=queue.front->next;
     61     while(q!=NULL)
     62     {
     63         printf("i= %d,data = %d
    ",i,q->data);
     64         q = q->next;
     65         i++;
     66 
     67     }
     68 }
     69 
     70 void destoryQueue(LinkQueue *queue)
     71 {
     72     while(queue->front != NULL)
     73     {
     74     queue->rear = queue->front->next;
     75     free(queue->front);
     76     queue->front = queue->rear;
     77 
     78     }
     79     printf("destoried!
    ");
     80 
     81 }
     82 
     83 int main()
     84 {
     85     LinkQueue queue;
     86     initQueue(&queue);
     87     insertQueue(&queue,2);
     88     insertQueue(&queue,2);
     89     insertQueue(&queue,2);
     90     insertQueue(&queue,2);
     91 
     92     insertQueue(&queue,2);
     93     traversal(queue);
     94     deleteQueue(&queue);
     95     traversal(queue);
     96     
     97     destoryQueue(&queue);
     98 
     99 
    100 }

    typedef struct Node{int data;struct Node *next;}Node,*Queue;
    typedef struct{Queue front;Queue rear;}LinkQueue;

  • 相关阅读:
    Python天天美味(17) open读写文件
    Linux服务器性能数据收集 Sysstat介绍
    招募Asp.net开发人员一名[上海]
    Python天天美味(21) httplib,smtplib
    Python天天美味(23) enumerate遍历数组
    试用IronPython
    Python天天美味(22) 拷贝对象(深拷贝deepcopy与浅拷贝copy)
    Python天天美味(13) struct.unpack
    Python天天美味(12) 条件判断的缩写
    分享Silverlight/WPF/Windows Phone一周学习导读(11月21日11月27日)
  • 原文地址:https://www.cnblogs.com/defen/p/5574747.html
Copyright © 2011-2022 走看看