用单链表实现一个队列

直接写代码吧
直接一些

#include<stdio.h>
#include<stdlib.h>
typedef int ElementType; /*队列元素类型*/
#define SUCCESS 0
#define FAILURE -1
/*定义队列结构*/
typedef struct StackInfo
{ElementType value; /*队列存储的数据*/struct StackInfo *next; /*指向队列的下一个元素*/
}StackInfo_st;
/*函数声明*/
StackInfo_st *createStack(void);
int stack_push(StackInfo_st *s,ElementType value);
int stack_pop(StackInfo_st *s,ElementType *value);
int stack_top(StackInfo_st *s,ElementType *value);
int stack_is_empty(StackInfo_st *s);
/*创建队列,外部释放内存*/
StackInfo_st *createStack(void)
{StackInfo_st *stack = (StackInfo_st *)malloc(sizeof(StackInfo_st));if(NULL == stack){printf("malloc failed\n");return NULL;} stack->next = NULL;return stack;
}
/*入队列,0表示成,非0表示出错*/
int stack_push(StackInfo_st *s,ElementType value)
{/*用来保存尾部指针*/StackInfo_st *tail = s;StackInfo_st *temp = (StackInfo_st *)malloc(sizeof(StackInfo_st));if(NULL == temp){printf("malloc failed\n");return FAILURE;}/*找到链表的尾部*/while(s->next != NULL){s = s->next;} temp->value = value;temp->next = s->next;s->next = temp;#if 0 /*将新的节点添加s->next前,使得s->next永远指向队列顶*/temp->value = value;temp->next = s->next;/*这一句是指向队列头部,实际上不用也没有问题*/s->next = temp;#endifreturn SUCCESS;
}
/*出队列*/
int stack_pop(StackInfo_st *s,ElementType *value)
{/*首先判断队列是否为空*/if(stack_is_empty(s))return FAILURE;/*找出队列顶元素*/*value = s->next->value;/*保存等下需要free的指针*/StackInfo_st *temp = s->next;/*更换队列顶的位置*/s->next = s->next->next;/*释放队列顶节点内存*/if(temp!=NULL)/*先判断指针是否为空*/free(temp);temp = NULL;return SUCCESS;
}
/*访问队列顶元素*/
int stack_top(StackInfo_st *s,ElementType *value)
{/*首先判断队列是否为空*/if(stack_is_empty(s)){return FAILURE;}*value = s->next->value;return SUCCESS;
}
/*判断队列是否为空,空返回1,未空返回0*/
int stack_is_empty(StackInfo_st *s)
{/*队列顶指针为空,则队列为空*/if(s->next == NULL){printf("队列为空\n");return true;}return false; 
}
int main(void)
{/*创建队列*/StackInfo_st *stack = createStack();printf("初始化队列头部\n");/*如果队列为空,则压入元素1*/if(stack_is_empty(stack)){int i = 0;for(i = 0 ;i< 23;i++){ printf("向队列中放入第 [ %d ] 数据是 %d\n",i,i*3 + 7);stack_push(stack,i*3 +7);} }/*访问队列顶元素*/int topVal;stack_top(stack, &topVal);printf("队列头部的数据是 %d\n",topVal);/*出队列*/int j = 0;for(j = 0;j<25;j++){int popVal = 0;if(stack_pop(stack, &popVal) == SUCCESS){printf("取出队列第 [ %d ]个的 数据 是 [ %d ]\n",j,popVal);}}/*最后记得将队列内存都释放,可自己尝试实现*/return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 之 如何删除Unity项目里面没用的东西??

选中需要用到的Scene&#xff0c;右键选 Select Dependencies&#xff0c;这样会选出这个场景所有用到的文件&#xff0c;将这些文件导出为 .unitypackage。 用同样的办法就所有用到的几个场景的文件分别导出包。在项目中删除除场景文件之外的所有其它文件&#xff0c;再将原先…

java access jdbc_Java连接Access数据库

JDBC(Java DataBase Connectivity)是Java数据库连接API。JDBC能完成与一个数据库建立连接&#xff0c;然后向数据库发送SQL语句&#xff0c;再处理数据库返回的结果。JDBC在设计上和ODBC相似。JDBC和数据库建立连接的一种方式是首先建立起一个JDBC-ODBC桥接器。首先安装office2…

python turtle 怎么设计背景颜色_Python, turtle海龟作图,如何添加背景图片?

展开全部 turtle.bgpic(rres/bg.png) #这样设置62616964757a686964616fe58685e5aeb931333431346334。def bgpic(self, picnameNone): """Set background image or return name of current backgroundimage. Optional argument: picname -- a string, name of a …

五分钟搞懂什么是红黑树(全程图解)

红黑树&#xff0c;对很多童鞋来说&#xff0c;是既熟悉又陌生。熟悉是因为在校学习期间&#xff0c;准备面试时&#xff0c;这是重点。然后经过多年的荒废&#xff0c;如今已经忘记的差不多了。如果正在看文章的你&#xff0c;马上快要毕业&#xff0c;面临着找工作的压力&…

SequenceFile文件

SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File)。目前&#xff0c;也有不少人在该文件的基础之上提出了一些HDFS中小文件存储的解决方案&#xff0c;他们的基本思路就是将小文件进行合并成一个大文件&#xff0c;同时对这些小文件的…

python去停用词用nltk_使用nltk删除英文停用词

一、概念 首先我们来看一下停用词的概念&#xff0c;然后来介绍使用nltk如何删除英文的停用词&#xff1a; 由于一些常用字或者词使用的频率相当的高&#xff0c;英语中比如a&#xff0c;the, he等&#xff0c;中文中比如&#xff1a;我、它、个等&#xff0c;每个页面几乎都包…

win10右键闪退到桌面_WIN10设置闪退,桌面右键个性化显示设置等均无效

开始菜单点击设置&#xff0c;会报错&#xff0c;详细信息记不清了&#xff0c;提示路径C:\Windows\ImmersiveControlPanel\SystemSettings.exe&#xff0c;使用fix it修复工具无效尝试更新系统&#xff0c;更新至最新版本后仍然存在问题事件管理器中找到了这个错误应用程序名称…

Linux 内核红黑树分析

Android binder 内核实现是用红黑树的&#xff0c;理解红黑树我觉得是每一个Linux er的重中之重&#xff0c;感谢格子森同学的投稿&#xff0c;周末愉快。内核版本为 linux4.2.1 本文主要从红黑树的代码实现入手&#xff0c;来讨论linux内核中是如何实现红黑树的(主要是插入和删…

postgresql数据库安装及简单操作

自从MySQL被Oracle收购以后&#xff0c;PostgreSQL逐渐成为开源关系型数据库的首选。 本文介绍PostgreSQL的安装和基本用法&#xff0c;供初次使用者上手。以下内容基于Debian操作系统&#xff0c;其他操作系统实在没有精力兼顾&#xff0c;但是大部分内容应该普遍适用。 一、安…

python中协程与函数的区别_python 协程与go协程的区别

进程、线程和协程 进程的定义&#xff1a; 进程&#xff0c;是计算机中已运行程序的实体。程序本身只是指令、数据及其组织形式的描述&#xff0c;进程才是程序的真正运行实例。 线程的定义&#xff1a; 操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是…

周末随想,野路子

焦虑不知道是不是因为科技太发达的原因&#xff0c;晚上睡觉之前总是要看看手机&#xff0c;现在写公众号之后&#xff0c;也经常有读者问问题&#xff0c;总是担心错过哪条消息&#xff0c;所以时刻想看手机&#xff0c;而且因为太过于焦虑的原因&#xff0c;我把微信设置为静…

appium for java教程_appium自动化测试入门(java版)

1、简述appium 是一个自动化测试开源工具&#xff0c;支持 iOS 平台和 Android 平台上的原生应用&#xff0c;web应用和混合应用。“移动原生应用”是指那些用iOS或者 Android SDK 写的应用(Application简称app)。“移动web应用”是指使用移动浏览器访问的应用(appium支持iOS上…

c语言错误解析-变量声明

问题描述&#xff1a;在vc6syntax error : missing ; before type int main(){ printf("Systembegin\n"); PID_init(); int count0; 如上 在VC中编译c程序&#xff0c;在一个大括号括起的范围内&#xff0c;如果变量声明放在了函数调用的后面&#xff0c;那么编译的…

python 批量处理文件_python批量处理文件或文件夹

# -*- coding: utf-8 -*- import os,shutil import sys import numpy as np ##########批量删除不同文件夹下的同名文件夹############# def arrange_file(dir_path0): for dirpath,dirnames,filenames in os.walk(dir_path0): if my_result in dirpath: # print(dirpath) shut…

sizeof你真的弄明白了吗?

sizeof基础在C语言中&#xff0c;sizeof是一个操作符&#xff08;operator&#xff09;&#xff0c;而不是函数&#xff01;其用于判断数据类型或者表达式长度&#xff08;所占的内存字节数&#xff09;。其有两种表达形式&#xff1a;&#xff08;1&#xff09;sizeof(类型说明…

bat java 启动脚本_bat批处理启动java程序通用脚本

前提&#xff1a;脚本假设需要给脚本传递两个参数&#xff0c;参数最终传给java程序脚本同级目录中classes内存放的是程序运行的classes文件脚本同级目录中lib内存放的是程序运行的jar包非最佳脚本&#xff0c;根据需求自行修改启动脚本&#xff1a;不需要传递参数直接双击打开…

!DOCTYPE 标签是什么

<!DOCTYPE> 标签是什么 DOCTYPE 标签&#xff0c;是html文档的类型声明&#xff08;document type declaration&#xff0c;所谓声明&#xff0c;也就是宣称我他妈是谁&#xff09;&#xff0c;用来告诉浏览器&#xff0c;使用什么样的文档类型定义&#xff08;Document …

一道90%都会做错的指针题

今天&#xff0c;在我们的一个小群里&#xff0c;一个同学发了一道题目给我看&#xff0c;这道题目应该是C语言面试的一股清流了&#xff0c;各种招聘笔试上都可以看到&#xff0c;我试着发到我的大群里去&#xff0c;发现有人对这个理解不是很深刻&#xff0c;所以再发出来&am…

python调用arcgis_arcgis python 调用工具两种两种方法

原博文 2019-09-20 11:26 − arcpy.Select_analysis("p","kk") arcpy.analysis.Select("p","kk1") ... 相关推荐 2019-12-18 20:28 − import time import wmi, zlib def get_cpu_info(): tmpdict {} tmpdict["CpuCores"] …

ibatis mysql 同时删多个表报错_MySQL中Multiple primary key defined报错的解决办法

MySQL中Multiple primary key defined报错的解决办法创建主键可以有两种方式&#xff1a;create table 表名(字段名 类型&#xff0c;字段名 类型&#xff0c;……primary key(name));或者是create table 表名(字段名 类型 primary key&#xff0c;字段名 类型&#xff0c;………