当前位置: 首页 > 编程日记 > 正文

LinkQueue的基本创建

队列是一种先进先出(first in first out,缩写为FIFO)的线性表。它只允许在表的一端进行插入,而在另一端进行删除元素。和平常我们排队打饭类似。

链队列是用链表表示的队列的简称。一个链队列需要两个分别指示队头和队尾的指针(分别称为头指针和尾指针)才能唯一确定。为方便起见,我们也给链队列添加一个头结点,并令头指针指向头结点。由此,空的链队列的判决条件是头指针和尾指针均指向头结点。

#include <iostream>
using namespace std;
#include <malloc.h>
#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define IINFEASIBLE -1
#define OVERFLOW -2typedef int Status;//函数返回结果类型
typedef int QElemType;//元素类型//定义链队列结点结构
typedef struct QNode{QElemType data;//元素值struct QNode *next;//指向下一个结点的指针
}QNode,*QueuePtr;//定义链队列结构
typedef struct{QueuePtr front; //队头指针QueuePtr rear;//队尾指针
}LinkQueue;

//构造一个空队列Q

Status InitQueue(LinkQueue &Q){//构造一个空队列Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));//为队头和队尾指针分配内存if(!Q.front)exit(OVERFLOW);//存储分配失败Q.front->next = NULL;//队头结点指向NULLreturn OK;}

//销毁队列Q,Q不再存在

Status DestroyQueue(LinkQueue &Q) {// 当队列中还有元素while (Q.front) {Q.rear = Q.front->next;// 队尾指针指向队头指针的下一个元素free(Q.front); // 释放队头指针所在节点Q.front = Q.rear; // 队头指针指向队尾指针(即原来的下一个元素)}return OK;
}

 //判断队列是否为空

Status QueueEmpty(LinkQueue Q){if((Q.front==NULL)&&(Q.rear==NULL))return TRUE;else return FALSE;
}

//插入元素e为Q的新队尾元素

Status EnQueue(LinkQueue &Q,QElemType e){//插入元素e为Q的新的队尾元素QueuePtr p;p = (QueuePtr)malloc(sizeof(QNode));if(!p)exit(OVERFLOW);//存储分配失败p->data = e;p->next = NULL;//插在队尾Q.rear->next = p;//队尾指针的下一个结点指向新元素Q.rear = p;//队尾指针指向新元素return OK;
}

//删除队头元素

Status DeQueue(LinkQueue &Q,QElemType &e){//若队列不空。则删除Q的队头元素,用e返回其值,并返回OK,否则返回ERRORif(QueueEmpty(Q))return ERROR;QueuePtr p;p = Q.front->next;e = p->data;Q.front->next = p->next;if(Q.rear==p)   //当只有一个元素时,出队后队空,所以此时要修改队尾指针Q.rear = Q.front;free(p);//释放所删除元素的结点return OK;
}

//查找元素

Status Search(LinkQueue &Q,QElemType &e){int i=1,flag;if(QueueEmpty(Q))return ERROR;QueuePtr p;for(p=Q.front->next;p;p=p->next){if(e!=p->data){flag=0;i++;}else{flag=1;break;}}if(flag==0){cout << "查无此元素!" << endl;}else{cout << "查找成功!此元素所在位置为:" << endl;printf("%d\n",i);}return OK;}

//返回队头元素

Status GetHead(LinkQueue &Q,QElemType &e){QueuePtr p;if(QueueEmpty(Q))return ERROR;elsep = Q.front->next;e = p->data;return OK;
}

//打印队列元素

void print(LinkQueue Q)
{QueuePtr p;if(QueueEmpty(Q))cout << "队列为空!" << endl;for(p=Q.front->next;p;p=p->next){printf("%d",p->data);printf("\n");}
}

//主函数

int main()
{LinkQueue Q;//队列int t,i,n,e,m = 10;while(m){cout<<"1----init"<<endl;cout<<"2----input"<<endl;cout<<"3----search"<<endl;cout<<"4----gethead"<<endl;cout<<"5----delete"<<endl;cout<<"6----destroy"<<endl;cout<<"0----exit"<<endl;cin>>m;switch(m){case 1:t=InitQueue(Q);if(t==OK){cout << "创建成功!" << endl;}else{cout << "创建失败!" << endl;}break;case 2:cout << "请输入需要插入元素的个数以及是什么元素?" << endl;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&e);t=EnQueue(Q,e);}if(t==OK){cout << "插入成功!队列元素为:" << endl;}else{cout << "插入失败!" << endl;}print(Q);break;case 3:cout << "请输入需要查找的元素:" << endl;cin>>e;Search(Q,e);break;case 4:GetHead(Q,e);cout << "队头元素为:" <<e<< endl;break;case 5:t=DeQueue(Q,e);if(t==OK){cout << "删除成功!队列元素为:" << endl;}else{cout << "删除失败!原队列元素为:" << endl;}print(Q);break;case 6:t=DestroyQueue(Q);if(t==OK){cout << "销毁成功!" << endl;}else{cout << "销毁失败!" << endl;}case 0:break;}}return 0;
}

相关文章:

请教一个算法问题,有两个数组A,B,判断A中是否至少有一个元素和B中元素相同...

最笨的办法当然是二层嵌套循环&#xff0c;但觉得应该有更好的方法&#xff0c;但是着实想不出来&#xff0c;想听听大家的意见&#xff0c;大家帮帮小弟 i.e string[] A{"X","Y","Z","W"}; string[] B{"X","E",&…

超市账单管理系统之-------登录

报500的错大部分都是springmvc的jar包没有导对&#xff0c;最好用3点几的版本 。。。。在项目中要把包导对 pom.xml 所需要的jar包 1 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"2 xs…

进制转换converse

栈和队列是在软件设计中常用的两种数据结构&#xff0c;它们的逻辑结构和线性表相同。 其特点在于运算受到了限制&#xff1a;栈按“后进先出”的规则进行操作&#xff0c;队按“先进先出”的规则进行操作&#xff0c;故称运算受限制的线性表。 从数据类型的角度看: 它们和线…

40.多进程同步--锁--多把锁

多进程同步 首先多进程默认是并发行为&#xff0c;多个进程同时执行执行的顺序&#xff0c;以及何时执行完毕无法控制 多个进程如果涉及到了通信&#xff0c;数据的有序性无法保证需要锁来控制进程之间执行的顺序对于进程资源的控制缺点&#xff1a;同步进程&#xff0c;并发没…

.net导出到Excel与Word中(带上下标)

//输出到excel的函数,可直接copy到 cs页面privatevoidOutExcel(GridView dg, stringname) { dg.Visible true; Response.Clear(); Response.Buffer true; Response.Charset "GB2312"; name "attachment;filename&quo…

越来越不想写代码了

越来越不想写代码了今天刚下载了PD12版本&#xff0c;做了一个需求分析以及试用了几个新功能在对C&#xff03;支持的情况。感觉非常不错&#xff0c;特别是在代码生成方面&#xff0c;比我想的要好多了&#xff0c;而且比起其它语言的代码生成&#xff0c;好像就是对C&#xf…

【代码笔记】Web-CSS-CSS id和Class选择器

一&#xff0c;效果图。 二&#xff0c;代码。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>CSS id和class选择器</title> <style> #para1 { text-align: center; color: red; } .center { text-align: …

javascript取得鼠标的位置

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><title>JavaScript得到鼠标坐标<…

nginx缓存功能的设置

首先用的缓存是proxy_cache. 在http段里加入下列几句&#xff1a; [plain] view plaincopy proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_tem…

线性表List的基本创建

#include <iostream> using namespace std; #include <malloc.h> #include <stdio.h> #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define IINFEASIBLE -1 #define OVERFLOW -2 typedef int Status; /*类型名定义用status代替int;Sta…

点点看   只有想不到没有看不到

看了这些好看的图片&#xff0c;不禁也想把自己看到的图片与大家一起分享了&#xff01;[url]http://mm-nn.com.cn/MM[/url]网[url]http://haotupic.cn/[/url]好图片网[url]http://www.picguan.cn/[/url]美女图片馆[url]http://www.nvyoou.cn/[/url]女友网[url]http://www.soft…

二叉树的基本应用知识总结

#include <iostream> using namespace std; #include <malloc.h> #include <stdio.h> #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define IINFEASIBLE -1 #define OVERFLOW -2#define MAX_TREE_SIZE 100//二叉树的最大结点数 typedef ch…

JS原生选项卡 – 幻灯片效果

1 <!DOCTYPE HTML>2 <html>3 <head>4 <meta charset"utf-8">5 <title>JS实现幻动片选项卡</title>6 </head>7 <style>8 .container{9 text-align:center; 10 width:100%; 11 } 12 13 .ppt{ …

MSSQL 2008里事务的一个问题

今天在试MSSQL2008里的事务&#xff0c;发现如果事务中某条语句的表名错误&#xff0c;就无法用error或try回滚&#xff0c;具体如下&#xff1a;begin tran delete from test where id 5 --正确语句 dealete from testa where id1 4 --表名错误&#xff0c;testa 表…

避免在JSP中写java代码

作者&#xff1a;蜗牛学院CTO李懿老师 ​自从十年前的taglibs&#xff08;如JSTL&#xff09;和EL&#xff08;表达语言&#xff0c;这些事情&#xff09;诞生以来&#xff0c;在JSP中使用scriptlet&#xff08;<% %>这些东西&#xff09;的确是非常不鼓励的。 小脚本的主…

爱情也许是最忧伤的童话

也许爱情是一部忧伤的童话 惟其遥远与真实 惟其不可触摸与欠缺 方可成就起璀璨与神圣 或许&#xff0c;只有在难得最远的时候&#xff0c; 才能把曾经走过的那段日子 看得最真切、最清楚 放弃一个很爱你的人&#xff0c;并不痛苦 放弃一个你很爱的人&#xff0c;那才痛苦 爱…

Docker最全教程——从理论到实战(六)

Docker最全教程——从理论到实战&#xff08;六&#xff09; 原文:Docker最全教程——从理论到实战&#xff08;六&#xff09;托管到腾讯云容器服务 托管到腾讯云容器服务&#xff0c;我们的公众号“magiccodes”已经发布了相关的录屏教程&#xff0c;大家可以结合本篇教程一起…

c#中分割字符串的几种方法

第一种方法&#xff1a;打开vs.net新建一个控制台项目。然后在Main()方法下输入下面的程序。 string s"abcdeabcdeabcde"; string[] sArrays.Split(c); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果:ab deab deab de 我们看到了结果…

对相机所看的视角截屏保存为图片

对相机所看的视角截屏保存为图片&#xff1a; 1 using UnityEngine;2 using System.Collections;3 using UnityEngine.UI;4 /// <summary>5 /// 对相机截图6 /// </summary>7 public class Jietu : MonoBehaviour {8 9 public Camera camera; 10 Texture2D…

fsum函数测试以及分析

#include <stdio.h> #include <stdlib.h> #include <string.h>#define BUFSIZE 256//这是一句预定义&#xff0c;定义BUFSIZE的值是100&#xff0c;是缓冲空间的大小,作为数组的。int main(int argc, char *argv[]) //第一个int argc&#xff0c;是记录你输入…

oracle学习总结二(转义字符)

1、oracle 特殊字符 转义关键词&#xff1a; oracle 转义 环境&#xff1a;oracle 9i plsql在plsql里边执行:update userinfo set pageurlmyjsp?page1&pagesize10 where idtest这条sql语句往数据库的pageurl字段放进去了一…

C语言——冒泡法排序应用

#include <stdio.h> #include <stdlib.h> int main()/*有int main 就会有return 0;如果是void main ,就不用加上return 0了 */ {int i,j,temp;/*待会要用到&#xff0c;所以先定义,因为输入的都是整数&#xff0c;所以用int整数型*/int a[10];/*定义一个一维整型数…

2017 Multi-University Training Contest 3 hdu 6063

HDU 6063 思路&#xff1a; AC代码&#xff1a; #include "iostream" #include "string.h" #include "stack" #include "queue" #include "string" #include "vector" #include "set" #include "m…

[学习]GridView 学习集合 -- GridView中使用超链接的技巧

GridView中使用超链接的技巧 数据绑定方式有两种&#xff0c;如下示例&#xff1a; Eval方式 &#xff1c;%# Eval("id") %&#xff1e; Bind方式 &#xff1c;%# Bind("id","~/info.aspx?id{0}") %&#xff1e; 推荐使用第一种方式&#xff0c…

C# http 性能优化500毫秒到 60 毫秒

来源&#xff1a;https://www.cnblogs.com/hnsongbiao/p/9815808.html 偶然发现 C# 的 HttpRequest 要比 Chrome 请求同一Url 慢好多。C# HttpRequest 要500毫秒 而Chrome 只需要 39ms。 后来 整理 各种方法做了优化 HttpWebRequest request WebRequest.Create(address) as H…

一个计算机高手的成长(转)

这些日子我一直在写一个实时操作系统内核&#xff0c;已有小成了&#xff0c;等写完我会全部公开&#xff0c;希望能 够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向 &#xff0c;所以把我的经历写出来与大家共勉&#xff0c;希望能给刚如行…

正则表达式整理

1.特殊字符 ^匹配输入字符串的开始位置$匹配输入字符串的结尾位置( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符&#xff0c;请使用 \( 和 \)。* 匹配前面的子表达式零次或多次。要匹配 * 字符&#xff0c;请使用 \*。匹配前面的子表达式一…

CSS-hover

1. padding:0 10px; 表示上下边距是0&#xff0c;左右边距是10. 2. padding:0 10px 0 10px&#xff1b; 上-右-下-左。&#xff08;顺时针方向&#xff09; 3. .pg-header .menu:hover&#xff1b; 表示只要鼠标移动到当前标签上时&#xff0c;就会应用这个下面所定义的样式。 …

Error原生类型

•表示错误对象 –EvalError, URIError, RangeError, etc. •捕获方式&#xff1a; –try { …throw new Error(…) } catch(e) { … } –理论上可以throw出任意对象 •Error对象IE和FireFox公有属性 –message&#xff1a;错误信息Error浏览器特定属性 •IE&#xff1a; –des…

求矩阵两条对角线元素之和

#include <stdio.h> #include <stdlib.h>int main() {int a[3][3];//定义一个二维数组&#xff0c;三行三列&#xff0c;a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2],a[3][0],a[3][1],a[3][2]int i,j,sum0;printf("请输入9个数据给数组赋值:\n");f…