zoukankan      html  css  js  c++  java
  • 42深入理解C指针之---指针与队列

    一、借助第40指针与链表的相关内容,稍微修改即可:

       1、定义头文件queue.h代码如下:

     1 #include <stdlib.h>
     2 #include <stdio.h>
     3
     4 #ifndef queue_h
     5 #define queue_h
     6 typedef int DataType;
     7
     8 typedef struct _node{
     9     DataType data;
    10     struct _node *next;
    11 } Node;
    12
    13 typedef struct _queue{
    14     Node *head;
    15     Node *tail;
    16 } Queue;
    17
    18 void initQueue(Queue *);
    19 void enQueue(Queue *, DataType);
    20 void deQueue(Queue *);
    21 int getLength(Queue *);
    22 void dispQueue(Queue *);
    23
    24 #endif

      头文件中依旧是完成数据类型的声明和数据的操作函数的声明。

       2、头文件对应的实现文件queue.c代码如下:

     1 #include "queue.h"
     2
     3 //队列初始化
     4 void initQueue(Queue *queue){
     5     queue->head = NULL;
     6     queue->tail = NULL;
     7 }
     8
     9 //队列入
    10 void enQueue(Queue *queue, DataType iData){
    11     Node *node = (Node *)malloc(sizeof(Node));
    12     node->data = iData;
    13     node->next = NULL;
    14
    15     if(queue->head == NULL){
    16         queue->head = node;
    17     }else{
    18         queue->tail->next = node;
    19     }
    20     queue->tail = node;
    21
    22     return;
    23
    24 }
    25
    26 //队列出
    27 void deQueue(Queue *queue){
    28     if(queue->head->next == NULL){
    29         queue->head = NULL;;
    30     }else{
    31         queue->head = queue->head->next;
    32     }
    33
    34     return;
    35 }
    36
    37 //队列长度
    38 int getLength(Queue *queue){
    39     Node *node = queue->head;
    40     int i = 0;
    41     while(node != NULL){
    42         node = node->next;
    43         i++;
    44     }
    45
    46     return i;
    47 }
    48
    49 //队列输出
    50 void dispQueue(Queue *queue){
    51     Node *node = queue->head;
    52     int i = 0;
    53     while(node != NULL){
    54         printf("the %dth node: %d
    ", i + 1, node->data);
    55         node = node->next;
    56         i++;
    57     }
    58     printf("disp finished!
    ");
    59
    60     return;
    61 }

      代码说明:

        1、入队函数使用链表的尾插法

        2、出队函数直接将链表的头节点删除即可实现出队功能

        3、queue.c对应的测试文件testQueue.c代码如下:

     1 #include "queue.h"
     2
     3 int main(int argc, char **argv)
     4 {
     5     Queue *queue1 = (Queue *)malloc(sizeof(Queue));
     6     printf("the first:
    ");
     7     initQueue(queue1);
     8     enQueue(queue1, 1);
     9     enQueue(queue1, 3);
    10     enQueue(queue1, 5);
    11     enQueue(queue1, 7);
    12     enQueue(queue1, 9);
    13     printf("The length: %d
    ", getLength(queue1));
    14     dispQueue(queue1);
    15     printf("the second:
    ");
    16     deQueue(queue1);
    17     printf("The length: %d
    ", getLength(queue1));
    18     dispQueue(queue1);
    19     deQueue(queue1);
    20     dispQueue(queue1);
    21     printf("The length: %d
    ", getLength(queue1));
    22     enQueue(queue1, 11);
    23     dispQueue(queue1);
    24     printf("The length: %d
    ", getLength(queue1));
    25
    26     return 0;
    27 }

      测试函数完成所有函数的功能测试,功能通过就OK!

  • 相关阅读:
    使用Intent传递类对象
    C#中关于类的序列化
    Android 中使用内存监测工具Heap,及内存分析工具 MAT
    Android Framework 记录之一
    Android 2.3发短信详细流程
    AIDL原理解析
    eclipse 快捷键
    什么时候加上android.intent.category.DEFAULT和LAUNCHER
    Monkey测试简介
    Phone状态的监听机制
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/6960858.html
Copyright © 2011-2022 走看看