zoukankan      html  css  js  c++  java
  • C语言实现数据结构中的链队列

    队列的链式存储结构简称链队列

    # include <stdio.h>
    # include <stdlib.h>
    /*定义链队列*/
    typedef char NodeData;
    typedef struct node
    {
     NodeData nodedata;  //节点数据
     struct node * next; //指向下一个节点的指针
    }QueueNode;

    typedef struct linkList
    {
     QueueNode * head; //队头指针
     QueueNode * rear; //队尾指针
    }LinkQueue;

    /*初始化队列*/
    void initQueue(LinkQueue * linkQueue)
    {
     linkQueue->head=linkQueue->rear=NULL;

    }

    /*判队空*/
    int isEmptyQueue(LinkQueue * linkQueue)
    {
     return linkQueue->head==NULL&&linkQueue->rear==NULL;
    }

    /*入队*/
    void inQueue(LinkQueue * linkQueue,NodeData nodeData)
    {
     //从队尾入队
     QueueNode *inNode=(QueueNode *)malloc(sizeof(QueueNode));
     inNode->nodedata=nodeData;
     inNode->next=NULL;
     //如果队为空
     if(isEmptyQueue(linkQueue))
     {
      linkQueue->head=inNode;
      linkQueue->rear=inNode;
     }
     else
     {
      QueueNode *rearNode=linkQueue->rear;
      rearNode->next=inNode;
      linkQueue->rear=inNode;
     }
    }

    /*出队*/
    NodeData outQueue(LinkQueue * linkQueue)
    {
     //从队首出队
     QueueNode *outNode;
     NodeData nodeDate;
     if(isEmptyQueue(linkQueue))
     {
      printf("THE QUEUE LIST IS NULL");
      exit(0);
     }
     outNode=linkQueue->head;
     nodeDate=outNode->nodedata;
     linkQueue->head=outNode->next;
     if(linkQueue->rear==outNode)
     {
      linkQueue->rear=NULL;
     }
     free(outNode);
     return nodeDate;
    }
    /*打印队列*/
    void printQueue(LinkQueue * linkQueue)
    {
     QueueNode *headNode=linkQueue->head;
     int i=0;
     QueueNode *node=headNode;
     while(node->next!=NULL)
     {
      printf("the node %d is %c/n",i,node->nodedata);
      node=node->next;
      i++;
     }
    }
    void main()
    {
     LinkQueue * linkQueue;
     char inData; //入队数据
     linkQueue=(LinkQueue *)malloc(sizeof(LinkQueue));
     //入队
     initQueue(linkQueue);
     printf("please input queue/n");
     while(inData!='/n')
     {
      scanf("%c",&inData);
      inQueue(linkQueue,inData);
     }
     //打印入队后的队列
     printQueue(linkQueue);
     //出队
     while(isEmptyQueue(linkQueue)!=1)
     {
      NodeData nodedata=outQueue(linkQueue);
      printf("out queue %c/n",nodedata);
     }
    }
     

  • 相关阅读:
    mybatis_7分页查询
    mybatis_6日志工厂
    mybatis_5解决属性名和字段名不一致的问题(resultMap)
    mybatis_4配置解析
    mybatis_3CRUD操作
    ARM C函数调用堆栈入栈顺序
    syscall SYSCALL_DEFINE*()实现
    ko kallsyms
    elf文件结构解析
    ko module加载flow
  • 原文地址:https://www.cnblogs.com/xiejava/p/15171482.html
Copyright © 2011-2022 走看看