话不多说,直接代码

 #include"stdio.h"
#include"stdlib.h"
typedef struct QNode{
int date;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
//初始化
int InitStack(LinkQueue &S){
S.front=(QueuePtr)malloc(sizeof(QNode));
//S.front=NULL;
S.rear=S.front;
if(!S.front)
return ;
S.front->next=NULL;
return ;
}
//进
int EnQueue(LinkQueue &S,int e){
QueuePtr p=NULL;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)exit();
p->date=e;
p->next=;
S.rear->next=p;
S.rear=p;
return ;
}
//置空
void ClearQueue(LinkQueue &S){
QueuePtr p=NULL;
p=S.front;
while(S.front!=S.rear){
p=S.front->next;
free(S.front);
S.front=p;
}
}
//判空
void QueueEmpty(LinkQueue &S){
if(S.front==S.rear)
printf("判空:是\n");
else
printf("判空:否\n"); }
//长度
int QueueLen(LinkQueue &S){
QueuePtr p=NULL;
int len=;
p=S.front;
if(S.front==S.rear)
return len;
else{
while(p!=S.rear){
len++;
p=p->next;
}
return len;
}
}
void len(LinkQueue &S){
printf("%d\n",S.front);
printf("%d\n",S.front->next);
printf("%d\n",S.rear);
printf("大小%d\n",sizeof(QNode));
printf("%d\n",S.rear-S.front->next);
printf("%d\n",S.rear-S.front);
printf("%d\n",(S.rear-S.front->next)/sizeof(QNode)); }
//出
int pop(LinkQueue &S){
int tem=;
QueuePtr p=NULL;
if(S.front->next==NULL)
return ;
else{
tem=S.front->next->date;
p=S.front->next;
free(S.front);
S.front=p;
return tem;
}
}
//输出
void QueueTraverse(LinkQueue &S){
printf("输出:");
QueuePtr p=S.front;
while(p!=S.rear){
printf("%d ",p->next->date);
p=p->next;
} }
void main(){
LinkQueue S;
printf("初始化:");
printf("%d\n",InitStack(S));
printf("%d\n",EnQueue(S,));
printf("%d\n",EnQueue(S,));
printf("%d\n",EnQueue(S,));
printf("%d\n",EnQueue(S,));
printf("%d\n",EnQueue(S,));
printf("长度:%d\n",QueueLen(S));
len(S);
QueueTraverse(S);
printf("输出:%d\n",pop(S));
QueueTraverse(S);
EnQueue(S,);
QueueTraverse(S);
QueueEmpty(S);
ClearQueue(S);
QueueEmpty(S);
}

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

在获取队列长度的时候不能像栈一样队首队尾直接相减,具体我也搞不懂为什么,代码中的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. HYSBZ 1036 树的统计Count (水题树链剖分)

    题意:中文题. 析:就是直接维护一个最大值和一个和,用线段树维护即可,这个题很简单,但是我卡了一晚上,就是在定位的时候,位置直接反过来了,但是样例全过了...真是... 代码如下: #pragma c ...

  2. 编写高质量代码改善C#程序的157个建议——建议38:小心闭包中的陷阱

    建议38:小心闭包中的陷阱 先看一下下面的代码,设想一下输出的是什么? static void Main(string[] args) { List<Action> lists = new ...

  3. FreeMarker的实例通俗理解

    1.把包lib/freemarker.jar拷贝到项目中 2.  在WEB-INF下新建文件夹templates  在templates下新建test.ftl文件 内容为: <html> ...

  4. C# / .Net Core 访问MongoDb库

    话不多说直接上代码 连接字符串: { "AppSettings": { "mongodb": "mongodb://用户名:密码@IP地址:端口号&q ...

  5. RealSense R400系列深度相机的图像获取保存和格式转换

    关于RealSense的基础使用的博文用的库有点混杂,挺多博文都是早期maneger的那个库,对那个不是很了解,主要记录一下使用最新的函数库的基础使用. 相机型号:RealSense R435 使用函 ...

  6. windows server2008虚拟机系统盘扩容

    windows server2008虚拟机的系统盘空间过小,对系统盘进行扩容,操作如下: 1.将虚拟机关机: 2.VMware对该虚拟机进行设置,选中磁盘,点击扩容,输入扩容大小,等待扩容完成: 3. ...

  7. 处理json

    一.json json是一个字符串,只不过长得比较像字典.使用json函数需要导入json库,即import json json的格式只有双引号,不可用单引号 1.json.loads()和json. ...

  8. CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境【转载】

    本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/11/28/2778779.h ...

  9. 如何查看Centos版本

    使用命令 cat /etc/centos-release 查看效果如下图 当然,你也可以查看红帽的版本 cat /etc/redhat-release 郴州软件开发培训 郴州软件培训 郴州java培训 ...

  10. POJ-1321-棋盘问题(深搜)

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65409   Accepted: 31227 Descriptio ...