循环队列(严3.30)--------西工大NOJ习题.9

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct _Queue
{
int max_size;
int rear;
int lenth;
int* data;
}Queue;
Queue* Create(int n)
{
Queue* Q = (Queue*)malloc(sizeof(Queue));
Q->data = (int*)calloc(n, sizeof(int));
Q->lenth = 0;
Q->max_size = n;
Q->rear = 0;//注意:当循环队列内部元素个数为0时,rear无意义。
return Q;
}
int Push(Queue* Q, int e)
{
if (Q->lenth == 0)
{
Q->rear = 0;
Q->lenth = 1;
Q->data[0] = e;
return 1;
}
if (Q->lenth >= Q->max_size)
{
return 0;
}
Q->rear = (Q->rear + 1) % Q->max_size;
Q->data[Q->rear] = e;
Q->lenth++;
return 1;
}
int Get_head(Queue* Q)
{
int t = Q->rear - Q->lenth + 1;
if (t < 0)
{
t = Q->max_size + t;
}
return Q->data[t];
}
int Full(Queue* Q)
{
if (Q->lenth >= Q->max_size)
return 1;
else
return 0;
}
int Empty(Queue* Q)
{
if (Q->lenth == 0)
return 1;
else
return 0;
}
void Print(Queue* Q)
{
int t = Q->rear - Q->lenth + 1;
if (t < 0)
{
t = Q->max_size + t;
}
for (int i = 0; i < Q->lenth; i++)
{
printf("%d ", Q->data[t]);
t = (t + 1) % Q->max_size;
}
}
void Read(Queue* Q)
{
char buf[12];
while (1)
{
scanf("%s", buf);
if (buf[0] == 'n')
return;
if (buf[0] == 'y')
return;
Push(Q, atoi(buf));
}
}
void Delete(Queue* Q, int e)
{
int t = Q->rear - Q->lenth + 1;
if (t < 0)
{
t = Q->max_size + t;
}
while (Q->data[t] != e)
{
Q->lenth -= 1;
t = (t + 1) % Q->max_size;
}
if (Get_head(Q) == e)
Q->lenth -= 1;
}
int main()
{
int n;
scanf("%d", &n);
Queue* Q = Create(n);
Read(Q);
int elem;
scanf("%d", &elem);
Delete(Q,elem);
Print(Q);
putchar('\n');
printf("%d", Get_head(Q));
return 0;
}
循环队列(严3.30)--------西工大NOJ习题.9的更多相关文章
- K阶斐波那契数列--------西工大NOJ习题.10
K阶斐波那契数列--------西工大NOJ习题.10 原创不易,转载请说明出处!!! 科普:k阶斐波那契数列的0到n-1项需要有初始值. 其中,0到n-2项初始化为0,第n-1项初始化为1. 在这道 ...
- 求广义表深度(严5.30)--------西工大noj
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef enum{ATOM, LIST ...
- 建立二叉树的二叉链表(严6.65)--------西工大noj
需要注意的点:在创建二叉树的函数中,如果len1==len2==0,一定要把(*T)置为NULL然后退出循环 #include <stdio.h> #include <stdlib. ...
- 二叉排序树的合并(严3.98)--------西工大noj
二叉排序树的合并有三种方法 先存入数组,然后..... 直接在第二个树上添加第一个数的元素,时间复杂度为O(NlogN) 就像是合并数组一样合并二叉排序树,分别扫描,时间复杂度极低. 第三种我写了一下 ...
- 输出以二叉树表示的算术表达式(严6.51)--------西工大noj
题解 这道题目说的很诡异,其实没有什么把括号补上....仅仅是先序读入,然后中序输出就行了 代码 #include <stdio.h> #include <stdlib.h> ...
- 建立二叉树的二叉链表存储结构(严6.70)--------西工大noj
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TreeNode ...
- 以十字链表为存储结构实现矩阵相加(严5.27)--------西工大noj
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef int ElemT ...
- 基于图的广度优先搜索策略(耿7.11)--------西工大noj.20
目录 代码 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ...
- 基于图的深度优先搜索策略(耿7.10)--------西工大noj
代码 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ...
随机推荐
- SSO 方案演进
背景介绍 随着业务与技术的发展,现今比以往任何时候都更需要单点登录 SSO 身份验证. 现在几乎每个网站都需要某种形式的身份验证才能访问其功能和内容. 随着网站和服务数量的增加,集中登录系统已成为一种 ...
- extcon驱动及其在USB驱动中的应用
extcon,是External Connector的简称,用于抽象外部连接器,比如说Audio Jack.USB MicroB/TypeC接口等.它的原型是Android的switch-class驱 ...
- kernel heap bypass smep,smap && 劫持modprobe_path
kernel heap bypass smep,smap && 劫持modprobe_path exp1 smep:smep即用户数据不可执行,当 CPU 处于 ring0 模式时,执 ...
- python工具--获取盛科交换机端口模块类型,波长,传输距离等信息
交换机端口模块信息对应的OID节点为各厂商私有节点,获取其他厂商信息需要把OID进行替换 1 #! /usr/bin/env python 2 #-*-coding:utf-8-*- 3 import ...
- [codeforces] 暑期训练之打卡题(二)
每个标题都做了题目原网址的超链接 Day11<Given Length and Sum of Digits...> 题意: 给定一个数 m 和 一个长度 s,计算最大和最小在 s 长度下, ...
- vue 的个人学习小笔记
一.vite2.0+vue3.0+ts 创建.配置 个人公众号文章地址 个人github仓库地址 1.Vite 创建 vue3 项目: 1.1.npm 常用命令 1.npm 查看版本号 npm vie ...
- MOS管实现的STC自动下载电路
目录 MOSFET, MOS管基础和电路 MOS管实现的STC自动下载电路 三极管配合 PMOS 管控制电路开关 STC MCU在烧录时, 需要断电重置后才能进入烧录状态, 通常是用手按开关比较繁琐. ...
- .NET Core中JWT+Auth2.0实现SSO,附完整源码(.NET6)
一.简介 单点登录(SingleSignOn,SSO) 指的是在多个应用系统中,只需登录一次,就可以访问其他相互信任的应用系统. JWT Json Web Token,这里不详细描述,简单说是一种认证 ...
- NodeJS全栈开发利器:CabloyJS究竟是什么
CabloyJS CabloyJS是一款顶级NodeJS全栈业务开发框架, 基于KoaJS + EggJS + VueJS + Framework7 文档 官网 && 文档 演示 PC ...
- HMS Core 视频编辑服务开放模板能力,助力用户一键Get同款酷炫视频
前言 短视频模板,是快捷创作短视频的一种方式,一般由专业设计师或模板创作人制作,用户只需替换视频模板中的部分素材,便可生成一支与模板一样的创意视频.这种省时省力.无需"烧脑"构思创 ...