• 队列 —— 链式存储


    队列:一种限定性的线性表,它只允许在表的一端插入元素,在表的另一端删除元素。在队列中,允许插入的一端叫做队尾,允许删除的一端则称为队头。

    特点:先进先出。

    链队列:用链表表示的队列称为链队列。

    空链队列:

      非空链队列:

     

     链队列存储结构的定义:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 typedef int QueueElemType;
     4 typedef struct Node {
     5     QueueElemType data;/*数据域*/
     6     struct Node* next;/*指针域*/
     7 }QueueNode;
     8 typedef struct {
     9     QueueNode* front;/*队首指针*/
    10     QueueNode* rear;/*队尾指针*/
    11 }LinkQueue;

    链队列初始化:

    1 int InitQueue(LinkQueue* q) {
    2     q->front = (QueueNode*)malloc(sizeof(QueueNode));
    3     if (q->front != NULL) {
    4         q->rear = q->front;
    5         q->front->next = NULL;
    6         return true;
    7     }
    8     return false;
    9 }

    链队列入队操作:

     1 int EnterQueue(LinkQueue *q,QueueElemType e) {
     2     QueueNode* node;
     3     node = (QueueNode*)malloc(sizeof(QueueNode));
     4     if (node!=NULL) {
     5         node->data = e;
     6         node->next = NULL;
     7         //结点从队尾进入
     8         q->rear->next = node;
     9         //队列的尾指针指向新尾结点
    10         q->rear = node;
    11         return true;
    12     }
    13     return false;
    14 }

    链队列出队操作:

     1 int DeleteQueue(LinkQueue *q,QueueElemType *e) {
     2     QueueNode* p;
     3     //判断是否队空
     4     if (q->front==q->rear) {
     5         return false;
     6     }
     7     p = q->front->next;
     8     //队首元素出队
     9     q->front->next = p->next;
    10     if (q->rear==p) {
    11         q->rear = q->front;
    12     }
    13     //记录出队元素
    14     *e = p->data;
    15     free(p);
    16     return true;
    17 }

    打印链队列内元素:

     1 void printfQueue(LinkQueue *q) {
     2     QueueNode* p;
     3     p = q->front->next;
     4     printf("队内元素:");
     5     while (p!=NULL)
     6     {
     7         printf("%d ", p->data);
     8         p = p->next;
     9     }
    10     printf("\n");
    11 }

    主函数:

     1 int main() {
     2     LinkQueue q;
     3     QueueElemType e;
     4     //初始化链队列
     5     InitQueue(&q);
     6     //元素入队
     7     EnterQueue(&q, 10);
     8     EnterQueue(&q, 20);
     9     EnterQueue(&q, 30);
    10     printfQueue(&q);
    11     //元素出队
    12     DeleteQueue(&q,&e);
    13     printf("出队元素:%d\n",e);
    14     printfQueue(&q);
    15     return 0;
    16 }

  • 相关阅读:
    vc 定义返回值为字符串函数方法
    typedef用法(二)
    新版.Net开发必备十大工具【转自www.bitsCN.com】
    大公司面试题
    NET(C#)连接各类数据库集锦
    对对象类型和调用方法属性进行存储以提升反射性能
    数据库连接字符串大全
    C#操作注册表的方法
    上班族解除疲劳
    在Microsoft Visual Studio 2005上安装.net3.0开发环境(含开发环境下
  • 原文地址:https://www.cnblogs.com/chaunceyji/p/13986671.html
Copyright © 2020-2023  润新知