话不多说,直接代码

 #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. MVC异常过滤器在三种作用范围下的执行顺序

    对于一般过滤器(即:除了IExceptionFilter ),当同时在Controller和Action中都设置了同一个过滤器后(例如IActionFilter),执行顺序一般是由外到里,即“全局”- ...

  2. 编写高质量代码改善C#程序的157个建议——建议14: 正确实现浅拷贝和深拷贝

    建议14: 正确实现浅拷贝和深拷贝 为对象创建副本的技术称为拷贝(也叫克隆).我们将拷贝分为浅拷贝和深拷贝. 浅拷贝 将对象中的所有字段复制到新的对象(副本)中.其中,值类型字段的值被复制到副本中后, ...

  3. EBS取Web字段SQL操作文档

    1)  安全性—>责任-à定义 在这个路径下,输入责任名称,可以查询这个责任的请求组的名称 2)  organization_id 和 org_id的功能 3)  查找网页上的字段 Naviga ...

  4. Oracle 定时任务讲解

    前几天,公司的job调度出现了问题,由于权限管的严,没有查看oracle 一些重要的数据字典,后面联系DBA,是由于数据库切换到备机时,参数设置不对,导致db job没有正常调度. 今天刚好有时间,想 ...

  5. Ubuntu下添加Python环境变量

    最近把自己在windows上的Django项目放在的Ubuntu上,启动时提示找不到模块 原来是自己的项目用的是虚拟环境,安装的第三方库全部在虚拟环境中 AutoTestSite/venv/Lib/s ...

  6. 「BZOJ 2733」「HNOI 2012」永无乡「启发式合并」

    题意 你需要维护若干连通快,有两个操作 合并\(x,y\)所在的连通块 询问\(x\)所在连通块中权值从小到大排第\(k\)的结点编号 题解 可以启发式合并\(splay\),感觉比较好些的 一个连通 ...

  7. 移动端页面怎么适配ios页面

    1.viewport 简单粗暴的方式:<meta name="viewport" content="width=320,maximum-scale=1.3,user ...

  8. Spring Boot多数据源

    我们在开发过程中可能需要用到多个数据源,我们有一个项目(MySQL)就是和别的项目(SQL Server)混合使用了.其中SQL Server是别的公司开发的,有些基本数据需要从他们平台进行调取,那么 ...

  9. [AGC006] D - Median Pyramid Hard 二分

    Description ​ 现在有一个NN层的方块金字塔,从最顶层到最底层分别标号为1...N1...N. ​ 第ii层恰好有2i−12i−1个方块,且每一层的中心都是对齐的. 这是一个N=4N=4的 ...

  10. linux安装数据库

    1.登录数据库 mysql -u root -p xxxxxx 2.创建数据库 create database xx; 3.use xx; 4.source xx.sql