话不多说,直接代码

  1. #include"stdio.h"
  2. #include"stdlib.h"
  3. typedef struct QNode{
  4. int date;
  5. struct QNode *next;
  6. }QNode,*QueuePtr;
  7. typedef struct{
  8. QueuePtr front;
  9. QueuePtr rear;
  10. }LinkQueue;
  11. //初始化
  12. int InitStack(LinkQueue &S){
  13. S.front=(QueuePtr)malloc(sizeof(QNode));
  14. //S.front=NULL;
  15. S.rear=S.front;
  16. if(!S.front)
  17. return ;
  18. S.front->next=NULL;
  19. return ;
  20. }
  21. //进
  22. int EnQueue(LinkQueue &S,int e){
  23. QueuePtr p=NULL;
  24. p=(QueuePtr)malloc(sizeof(QNode));
  25. if(!p)exit();
  26. p->date=e;
  27. p->next=;
  28. S.rear->next=p;
  29. S.rear=p;
  30. return ;
  31. }
  32. //置空
  33. void ClearQueue(LinkQueue &S){
  34. QueuePtr p=NULL;
  35. p=S.front;
  36. while(S.front!=S.rear){
  37. p=S.front->next;
  38. free(S.front);
  39. S.front=p;
  40. }
  41. }
  42. //判空
  43. void QueueEmpty(LinkQueue &S){
  44. if(S.front==S.rear)
  45. printf("判空:是\n");
  46. else
  47. printf("判空:否\n");
  48.  
  49. }
  50. //长度
  51. int QueueLen(LinkQueue &S){
  52. QueuePtr p=NULL;
  53. int len=;
  54. p=S.front;
  55. if(S.front==S.rear)
  56. return len;
  57. else{
  58. while(p!=S.rear){
  59. len++;
  60. p=p->next;
  61. }
  62. return len;
  63. }
  64. }
  65. void len(LinkQueue &S){
  66. printf("%d\n",S.front);
  67. printf("%d\n",S.front->next);
  68. printf("%d\n",S.rear);
  69. printf("大小%d\n",sizeof(QNode));
  70. printf("%d\n",S.rear-S.front->next);
  71. printf("%d\n",S.rear-S.front);
  72. printf("%d\n",(S.rear-S.front->next)/sizeof(QNode));
  73.  
  74. }
  75. //出
  76. int pop(LinkQueue &S){
  77. int tem=;
  78. QueuePtr p=NULL;
  79. if(S.front->next==NULL)
  80. return ;
  81. else{
  82. tem=S.front->next->date;
  83. p=S.front->next;
  84. free(S.front);
  85. S.front=p;
  86. return tem;
  87. }
  88. }
  89. //输出
  90. void QueueTraverse(LinkQueue &S){
  91. printf("输出:");
  92. QueuePtr p=S.front;
  93. while(p!=S.rear){
  94. printf("%d ",p->next->date);
  95. p=p->next;
  96. }
  97.  
  98. }
  99. void main(){
  100. LinkQueue S;
  101. printf("初始化:");
  102. printf("%d\n",InitStack(S));
  103. printf("%d\n",EnQueue(S,));
  104. printf("%d\n",EnQueue(S,));
  105. printf("%d\n",EnQueue(S,));
  106. printf("%d\n",EnQueue(S,));
  107. printf("%d\n",EnQueue(S,));
  108. printf("长度:%d\n",QueueLen(S));
  109. len(S);
  110. QueueTraverse(S);
  111. printf("输出:%d\n",pop(S));
  112. QueueTraverse(S);
  113. EnQueue(S,);
  114. QueueTraverse(S);
  115. QueueEmpty(S);
  116. ClearQueue(S);
  117. QueueEmpty(S);
  118. }

在使用构造体的时候注意应该有两个构造体,分别对应整个链表和链表的一个结点。

在获取队列长度的时候不能像栈一样队首队尾直接相减,具体我也搞不懂为什么,代码中的len函数就是对该方法的测试。

另外,一定在。要注意S.front并不是第一个元素的位置,S.front->next才是,见图

c语言实现队列的基本操作的更多相关文章

  1. 二、 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)

    请指教交流! package com.it.hxs.c01; import java.util.Stack; /* 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek) */ ...

  2. c语言描述的链队列的基本操作

    #include<stdio.h> #include<stdlib.h> #define ok 0 #define error 1 //链队列特点在于不仅有链的头指针和尾指针, ...

  3. c语言多线程队列读写

    最近用c语言写了个简单的队列服务,记录一下,文件结构为 main.c queue.c queue.h,代码如下: 主函数 #define NUM_THREADS 200 #include <st ...

  4. C语言实现二叉树的基本操作

    二叉树是一种非常重要的数据结构.本文总结了二叉树的常见操作:二叉树的构建,查找,删除,二叉树的遍历(包括前序遍历.中序遍历.后序遍历.层次遍历),二叉搜索树的构造等. 1. 二叉树的构建 二叉树的基本 ...

  5. C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...

  6. Go语言基础之16--Mysql基本操作

    一.Mysql驱动及数据库连接 1.1 Golang中的Mysql驱动 A. https://github.com/go-sql-driver/mysql B. Go本身不提供具体数据库驱动,只提供驱 ...

  7. D_S 循环队列的基本操作

    //  main.cpp #include <iostream> using namespace std; #include "Status.h" typedef in ...

  8. C语言 复杂队列(链表队列)

    //复杂的队列二 --链表队列 #include<stdio.h> #include<stdlib.h> #define datatype int struct queueli ...

  9. c语言对于文本的基本操作

    字符读写函数  :fgetc和fputc 字符串读写函数:fgets和fputs 数据块读写函数:freed和fwrite 格式化读写函数:fscanf和fprinf   1.字符读写: fgetc函 ...

随机推荐

  1. 原生ajax访问服务器所展现的现象

    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>ajax ...

  2. Requests接口测试(三)

    一.定制请求头 我们先来看一下,关于请求头的定制演示,相信了解http协议的小伙伴应该对请求头部headers请求头部并不陌生,那么作为实际工作中的我们,如果想自定义一些请求头的信息,我们应该怎么办呢 ...

  3. C++函数后面加throw关键字简记

    看代码时候看到fun() throw()的用法,找到一篇blog解释很简单,如下: C++函数后面加关键字throw(something)限制,是对这个函数的异常安全性作出限制. 举例及解释如下: v ...

  4. 在Eclipse中连接SQL

    原创 在Eclipse中连接SQL分为如下几个步骤: 1.加载驱动程序 2.创建连接对象 3.创建执行SQL语句的对象 4.执行SQL语句 5.关闭new出来的对象 1.加载驱动程序(以SQL为例) ...

  5. indexOf(String.indexOf 方法)

    字符串的IndexOf()方法搜索在该字符串上是否出现了作为参数传递的字符串,如果找到字符串,则返回字符的起始位置 (0表示第一个字符,1表示第二个字符依此类推)如果说没有找到则返回 -1 返回 St ...

  6. delphi计算两个时间差

    uses DateUtils; var S1, S2: string; T1, T2: TDateTime; D, H, M, S: Integer; Value: Int64; begin S1 : ...

  7. 【C#】浅克隆和深克隆的区别和在C#中的体现形式

    前言:我们知道对象分引用类型和值类型. 浅克隆:复制一个现有对象,引用类型指向同一个内存块(string为最特殊的对象,这里当作值类型来看先) public class User { public i ...

  8. python 读取mysql存储的文件路径下载文件,内容解析,上传七牛云,内容入es

    #!/usr/bin/env python # -*- coding: utf-8 -*- import ConfigParser import json import os import re fr ...

  9. LSI SAS3IRCU配置SAS3系列RAID卡

    LSI SAS3IRCU配置SAS3系列RAID卡 一.适用的controller LSISAS3008 LSISAS3004 二.名词解释 Controller: IR: Volume: 卷,基于物 ...

  10. day3学python 字典+列表集合+文件读取

    字典+列表集合+文件读取 字典示例 ************************ 各地食品的三级菜单************************* 1.使用字典嵌套字典 2.采用死循环思路 3 ...