Chinaunix首页 | 论坛 | 博客
  • 博客访问: 640476
  • 博文数量: 63
  • 博客积分: 1265
  • 博客等级: 中尉
  • 技术积分: 789
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-06 21:54
文章分类

全部博文(63)

文章存档

2017年(1)

2016年(3)

2015年(2)

2013年(5)

2012年(20)

2011年(32)

分类: C/C++

2011-07-03 10:47:20

队列的链式存储结构简称链队列
  1. # include <stdio.h>
  2. # include <stdlib.h>
  3. /*定义链队列*/
  4. typedef char NodeData;
  5. typedef struct node
  6. {
  7.  NodeData nodedata; //节点数据
  8.  struct node * next; //指向下一个节点的指针
  9. }QueueNode;

  10. typedef struct linkList
  11. {
  12.  QueueNode * head; //队头指针
  13.  QueueNode * rear; //队尾指针
  14. }LinkQueue;

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

  19. }

  20. /*判队空*/
  21. int isEmptyQueue(LinkQueue * linkQueue)
  22. {
  23.  return linkQueue->head==NULL&&linkQueue->rear==NULL;
  24. }

  25. /*入队*/
  26. void inQueue(LinkQueue * linkQueue,NodeData nodeData)
  27. {
  28.  //从队尾入队
  29.  QueueNode *inNode=(QueueNode *)malloc(sizeof(QueueNode));
  30.  inNode->nodedata=nodeData;
  31.  inNode->next=NULL;
  32.  //如果队为空
  33.  if(isEmptyQueue(linkQueue))
  34.  {
  35.   linkQueue->head=inNode;
  36.   linkQueue->rear=inNode;
  37.  }
  38.  else
  39.  {
  40.   QueueNode *rearNode=linkQueue->rear;
  41.   rearNode->next=inNode;
  42.   linkQueue->rear=inNode;
  43.  }
  44. }

  45. /*出队*/
  46. NodeData outQueue(LinkQueue * linkQueue)
  47. {
  48.  //从队首出队
  49.  QueueNode *outNode;
  50.  NodeData nodeDate;
  51.  if(isEmptyQueue(linkQueue))
  52.  {
  53.   printf("THE QUEUE LIST IS NULL");
  54.   exit(0);
  55.  }
  56.  outNode=linkQueue->head;
  57.  nodeDate=outNode->nodedata;
  58.  linkQueue->head=outNode->next;
  59.  if(linkQueue->rear==outNode)
  60.  {
  61.   linkQueue->rear=NULL;
  62.  }
  63.  free(outNode);
  64.  return nodeDate;
  65. }
  66. /*打印队列*/
  67. void printQueue(LinkQueue * linkQueue)
  68. {
  69.  QueueNode *headNode=linkQueue->head;
  70.  int i=0;
  71.  QueueNode *node=headNode;
  72.  while(node->next!=NULL)
  73.  {
  74.   printf("the node %d is %c/n",i,node->nodedata);
  75.   node=node->next;
  76.   i++;
  77.  }
  78. }
  79. void main()
  80. {
  81.  LinkQueue * linkQueue;
  82.  char inData; //入队数据
  83.  linkQueue=(LinkQueue *)malloc(sizeof(LinkQueue));
  84.  //入队
  85.  initQueue(linkQueue);
  86.  printf("please input queue/n");
  87.  while(inData!=''/n'')
  88.  {
  89.   scanf("%c",&inData);
  90.   inQueue(linkQueue,inData);
  91.  }
  92.  //打印入队后的队列
  93.  printQueue(linkQueue);
  94.  //出队
  95.  while(isEmptyQueue(linkQueue)!=1)
  96.  {
  97.   NodeData nodedata=outQueue(linkQueue);
  98.   printf("out queue %c/n",nodedata);
  99.  }
  100. }
阅读(3148) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~