数据结构之队列c代码实现

一学期的数据结构,总不能毫无收获吧,因为书上的很多代码并不能实现,我一个编程小白可怎么过呢,难得假期有时间,于是我寻求度娘,从四面八方找了些可以编译通过的源码,这一次是队列,后面我还会逐渐补充,如果有什么差错,欢迎大佬们来留言啊。

交一下代码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define QUEEN_SIZE 50
 4
 5 typedef struct SeqQueue
 6 {
 7     int data[QUEEN_SIZE];
 8     int front;
 9     int rear;
10 }Queue;
11
12 Queue *initQueue()
13 {
14     Queue *q=(Queue*)malloc(sizeof(Queue));
15     if(q==NULL)
16     {
17         printf("malloc failed!");
18         exit(-1);
19
20     }
21     q->front = 0;
22     q->rear = 0;
23     return q;
24 }
25 int IsFull(Queue *q)
26 {
27     return ((q->rear+1)%QUEEN_SIZE == q->front);
28 }
29 int IsEmpty(Queue *q)
30 {
31     return (q->rear == q->front);
32 }
33 void EnQueue(Queue *q,int n)
34 {
35     if(IsFull(q))
36     {
37         return;
38     }
39     q->data[q->rear] = n;
40     q->rear = (q->rear+1)%QUEEN_SIZE;
41 }
42 int Dequeue(Queue *q)
43 {
44    if(IsEmpty(q))
45         return 0;
46     int temp=q->data[q->front];
47     q->front = (q->front+1)%QUEEN_SIZE;
48     return temp;
49 }
50 int main()
51 {
52     Queue *q = initQueue();
53     int i;
54     for(i=0;i<10;i++)
55     {
56         EnQueue(q,i);
57     }
58     while(!IsEmpty(q))
59     {
60         int data=Dequeue(q);
61         if(IsEmpty(q))
62             printf("%d",data);
63         else
64         printf("%d-> ",data);
65     }
66 }

队列嘛,先进先出,添加元素时,先给rear赋值,然后移动向后rear,减少元素时,也是先赋值,再移动front指针,队列为空时rear==front,队列满时(rear+1)%MAXSIZE== front。

好了,附一张运行结果。

时间: 2024-08-05 08:30:59

数据结构之队列c代码实现的相关文章

数据结构 - 链队列的实行(C语言)

数据结构-链队列的实现 1 链队列的定义 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已, 我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端结点,如下图所示. 空队列时,front和rear都指向头结点,如下图所示. 链队列的结构为: typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int */ typedef struct QNode /* 结点结构 */ { QElemTy

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

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

简单数据结构之队列模拟

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

数据结构 - 顺序队列的实行(C语言)

数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避免当只有一个元素时,队头和队尾重合使得处理变得麻烦,所以引入两个指针:front指针指向队头元素,rear指针指向队尾元素的下一个位置,当front=rear时,为空队列,结构如下图所示. 假设是长度为5的数组,初始状态,空队列如下图左所示,front与 rear指针均指向下标为0的位置.然后入队a

数据结构--循环队列

一.顺序队列的改进 队列元素的出列是在队头,即下标为0的位置,那也就意味着,队列中的所有元素都得向前移动,以保证队列的队头(也就是下标为0的位置)不为空,此时的时间复杂度为0(n). 可有时想想,为什么出队列时一定要全部移动呢,如果不去限制队列的元素必须存储在数组的前n个单元这一条件,出队的性能就会大大增加.也就是说,队头不需要一定在下标为0的位置,比如也可以是a[1]等. 而为了避免当只有一个元素时,队头和队尾重合使处理变得麻烦,引入两个指针,front指针指向队头元素,rear指针指向队尾元

数据结构专题——队列的应用 A1056.Mice and Rice ( 25)

#include <bits/stdc++.h> #include<math.h> #include <string> using namespace std; const int maxn = 1010; struct mouse{ int weight;//质量 int R;//排名 }mouse[maxn]; int main(){ int np,ng,order; scanf("%d%d",&np,&ng); for(int

数据结构之链表、栈和队列 java代码实现

定义抽象节点类Node: 1 package cn.wzbrilliant.datastructure; 2 3 /** 4 * 节点 5 * @author ice 6 * 7 */ 8 public abstract class Node { 9 private Node next; 10 11 public Node(){ 12 next=null; 13 } 14 15 public void setNext(Node nextNode){ 16 next=nextNode; 17 }

数据结构之队列——顺序存储结构(php代码实现——方法一)

<?php /**  * 第一种--非循环顺序队列的实现方法  * 队列的头元素在为数组的下标为0的元素  * 这种方法的优缺点:  *  优点:头元素始终在下标为 0 的第一个元素,因此不需要设置头指针  *  缺点:元素出队是会移动大量元素,时间复杂度为O(n),效率比较低  *  */ class SqQueue{     private $SqArr;//队列存储数组     private $rear;//若队列不为空,则指向队尾元素的后一个位置     public function

数据结构之队列——链式存储结构(php代码实现)

<?php class QNode{     public  $data;     public  $next;     public function __construct($data){         $this->data=$data;         $this->next=null;     } } class LinkQueue{ //链队列包含头结点,实例化时,此队列为空     private $data;     private $next;     private