简单数据结构之队列模拟


  1 /**************************************************************************************
2 * Function : 模拟队列
3 * Create Date : 2014/04/23
4 * Author : NTSK13
5 * Email : [email protected]
6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。
7 * 任何单位和个人不经本人允许不得用于商业用途
8 * Version : V0.1
9 ***************************************************************************************
10 题目:简单数据结构之队列模拟
11
12 **************************************************************************************/
13 #include<stdio.h>
14
15 #define MY_FUNC 1
16 #if MY_FUNC
17
18 #define M 10 //队列最大长度
19
20 typedef struct queue
21 {
22 int data[M];
23 int len;//队列当前长度
24 }Queue;
25
26 int sample[M];
27 int result[M];
28
29 void init_queue(Queue *a);//队列初始化
30 int in_queue(Queue *a,int value);//进队
31 int out_queue(Queue *a);//出队
32 int get_head_element(Queue *a);//获取队首的元素
33
34 // The first method:
35 int main()
36 {
37 int i=0;
38 Queue sq;
39 init_queue(&sq);
40
41 freopen("input.txt","r",stdin);
42
43 for(i=0;i<M;i++)
44 scanf("%d",&sample[i]); // get input data
45 out_queue(&sq);
46 get_head_element(&sq);
47
48 for(i=0;i<M;i++)
49 in_queue(&sq,sample[i]);
50 in_queue(&sq,100);
51
52 for(i=0;i<M;i++)
53 result[i]=out_queue(&sq);
54
55 for(i=0;i<M;i++)
56 {
57 printf("%d\t",result[i]);
58 fflush(stdout);//修复Eclipse printf()不能显示的小bug
59 }
60
61 printf("\n");
62 fflush(stdout);
63
64 return (0);
65 }
66
67 void init_queue(Queue *a)//队列初始化
68 {
69 (*a).len=0;
70 }
71 //该种情况,进队效率太低
72 int in_queue(Queue *a,int value)//进队
73 {
74 int i=0;
75 if( (*a).len==M)
76 {
77 printf("Queue is full ,can not in !!!\n");
78 fflush(stdout);
79 return (-1);
80 }else{
81 if((*a).len==0)
82 {
83 (*a).data[0]=value;
84 (*a).len++;
85 return (1);
86 }else
87 {
88 for(i=(*a).len;i>0;i--)
89 {
90 (*a).data[i]=(*a).data[i-1];
91 }
92 (*a).data[0]=value;
93 (*a).len++;
94 return (1);
95 }
96 }
97 }
98 int out_queue(Queue *a)
99 {
100 int tmp=0;
101 if((*a).len==0)
102 {
103 printf("Queue is empty ,can not out !!!\n");
104 fflush(stdout);
105 return (-1);
106 }else{
107 tmp=(*a).len-1;
108 (*a).len--;
109 return ( (*a).data[tmp]);
110 }
111 }
112 int get_head_element(Queue *a)
113 {
114 if( (*a).len==0)
115 {
116 printf("Queue is empty full ,can not get !!!\n");
117 fflush(stdout);
118 return (-1);
119 }else{
120 return ( (*a).data[ (*a).len -1]);
121 }
122 }
123
124 /********************************************my function end**************************************************/
125 #else
126
127
128 #define M 10 //队列最大长度
129
130 typedef struct queue
131 {
132 int data[2*M-1];//队列最长为M
133 int head;
134 int tail;
135 int len;//队列当前长度
136 }Queue;
137
138 int sample[M];
139 int result[M];
140
141 void init_queue(Queue *a);//队列初始化
142 int in_queue(Queue *a,int value);//进队
143 int out_queue(Queue *a);//出队
144 int get_head_element(Queue *a);//获取队首的元素
145
146 // The second method:
147 int main()
148 {
149 int i=0;
150 Queue sq;
151 init_queue(&sq);
152
153 freopen("input.txt","r",stdin);
154
155 for(i=0;i<M;i++)
156 scanf("%d",&sample[i]); // get input data
157 out_queue(&sq);
158 get_head_element(&sq);
159
160 for(i=0;i<M;i++)
161 in_queue(&sq,sample[i]);
162 in_queue(&sq,100);
163
164 for(i=0;i<M;i++)
165 result[i]=out_queue(&sq);
166
167 for(i=0;i<M;i++)
168 {
169 printf("%d\t",result[i]);
170 fflush(stdout);//修复Eclipse printf()不能显示的小bug
171 }
172
173 printf("\n");
174 fflush(stdout);
175
176 return (0);
177 }
178
179
180 void init_queue(Queue *a)
181 {
182 (*a).len=0;
183 }
184
185 //这种方法 避免了 for 循环
186 int in_queue(Queue *a,int value)//进队
187 {
188 if( (*a).len==M)
189 {
190 printf("Queue is full ,can not in !!!\n");
191 fflush(stdout);
192 return (-1);
193 }else{
194 if((*a).len==0)
195 {
196 (*a).data[M]=value;
197 (*a).len++;
198 (*a).head=M;
199 (*a).tail=M;
200 return (1);
201 }else
202 {
203 if( (*a).tail ==0 )
204 (*a).tail=2*M-2;
205 else
206 (*a).tail--;
207
208 (*a).data[ (*a).tail]=value;
209 (*a).len++;
210 return (1);
211 }
212 }
213 }
214 int out_queue(Queue *a)
215 {
216 int tmp=0;
217 if((*a).len==0)
218 {
219 printf("Queue is empty ,can not out !!!\n");
220 fflush(stdout);
221 return (-1);
222 }else{
223 tmp=(*a).head;
224 if((*a).head==0)
225 (*a).head=2*M-2;
226 else
227 (*a).head--;
228 (*a).len--;
229 return ( (*a).data[tmp]);
230 }
231 }
232 int get_head_element(Queue *a)
233 {
234 if( (*a).len==0)
235 {
236 printf("Queue is empty full ,can not get !!!\n");
237 fflush(stdout);
238 return (-1);
239 }else{
240 return ( (*a).data[ (*a).head ]);
241 }
242 }
243
244 #endif

简单数据结构之队列模拟,码迷,mamicode.com

时间: 2024-10-18 06:00:43

简单数据结构之队列模拟的相关文章

简单数据结构之栈模拟

1 /************************************************************************************** 2 * Function : 模拟栈 3 * Create Date : 2014/04/23 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性. 7 * 任何单位和个人不经本人允许不得

数据结构和算法之栈和队列一:两个栈模拟一个队列以及两个队列模拟一个栈

今天我们需要学习的是关于数据结构里面经常看到的两种结构,栈和队列.可以说我们是一直都在使用栈,比如说在前面递归所使用的的系统的栈,以及在链表倒序输出时介绍的自定义栈类Stack和使用系统的栈进行递归.那么,在这里我们就讲述一下这两个比较具有特色的或者说关系比较紧密的数据结构之间的互相实现问题. 一:两个栈模拟实现一个队列: 栈的特点是先进后出,然而队列的特点是先进先出. public class Queen(Stack s1,Stack s2){ //实现插入的方法 public void ad

数据结构之队列and栈总结分析

一.前言: 数据结构中队列和栈也是常见的两个数据结构,队列和栈在实际使用场景上也是相辅相成的,下面简单总结一下,如有不对之处,多多指点交流,谢谢. 二.队列简介 队列顾名思义就是排队的意思,根据我们的实际生活不难理解,排队就是有先后顺序,先到先得,其实在程序数据结构中的队列其效果也是一样,及先进先出.    队列大概有如下一些特性: 1.操作灵活,在初始化时不需要指定其长度,其长度自动增加(默认长度为32) 注:在实际使用中,如果事先能够预估其长度,那么在初始化时指定长度,可以提高效率    

计算机程序的思维逻辑 (61) - 内存映射文件及其应用 - 实现一个简单的消息队列

本节介绍内存映射文件,内存映射文件不是Java引入的概念,而是操作系统提供的一种功能,大部分操作系统都支持. 我们先来介绍内存映射文件的基本概念,它是什么,能解决什么问题,然后我们介绍如何在Java中使用,我们会设计和实现一个简单的.持久化的.跨程序的消息队列来演示内存映射文件的应用. 基本概念 所谓内存映射文件,就是将文件映射到内存,文件对应于内存中的一个字节数组,对文件的操作变为对这个字节数组的操作,而字节数组的操作直接映射到文件上.这种映射可以是映射文件全部区域,也可以是只映射一部分区域.

数据结构专题——队列

一.队列(queue)(可与栈对比进行学习) 思想:队列实现的是一种先进先出(first-in,first-out,FIFO)策略.(<算法导论>) 定义:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表(具有线性关系/前驱后继关系).(<大话数据结构>) 术语: 队列的两端:队头(head):进行删除操作的一端.队尾(tail):进行插入操作的一端. 操作:队列的插入操作(insert):入队(enqueue). 队列的删除操作(delete):出队(dequeue

Python与数据结构[2] -&gt; 队列/Queue[0] -&gt; 数组队列的 Python 实现

队列 / Queue 数组队列 数组队列是队列基于数组的一种实现,其实现类似于数组栈,是一种FIFO的线性数据结构. Queue: <--| 1 | 2 | 3 | 4 | 5 |<-- 下面将使用Python中的list来替代C语言中的数组实现数组队列的数据结构. Note: 这里的实现并没有像C语言中的申请一块固定大小的数组,手动的定制数组中队列的头尾位置,而是利用list的特性直接完成,因此较为简单. 数组队列的实现与数组栈的实现基本类似,同时入列和出列也十分简单,仅需要对数组进行操作即

用两个队列模拟实现一个栈的过程

栈具有"后进先出"的特点,即某个元素最后进入栈,却最先出栈:队列具有"先进先出"的特点,即元素从队尾依次进队列,依次从队头出队列:现在用两个队列模拟实现一个栈的过程,详细过程请看下面这张本人制作的gif图: 实现代码: #include <iostream> using namespace std; #include <queue> template <typename T> class Stack { public: void

jQuery实现的简单文字提示效果模拟title(转)

来源 http://www.cnblogs.com/puzi0315/archive/2012/10/17/2727693.html 模拟title实现效果,可以修改文字的样式,换行等. 文件下载: 先看下效果截图: 代码分析: <!-- 引用jQuery --> <script src="jquery.js" type="text/javascript"></script> <style type="text/c

qtday02 qt做简单的加法器和模拟登陆功能

//在3t2目录下 //adder.h /* qt简单加法计算器 */ #ifndef ADDER_H #define ADDER_H #include<QDialog> #include<QLineEdit> #include<QtWidgets/QPushButton> #include<QtWidgets/QLabel> class Adder:public QDialog{ Q_OBJECT//让自定义的槽函数生效 private: QLineEdi