算法8---队列及其实现

队列及其实现

和上一部分关于栈的部分一样,不讲基本知识,直接实现,走你!

队列和栈相似,也包括一些基本的队列的操作,初始化,出队列,入队列,判空,判满,清空等操作。

  1 #include <stdlib.h>
  2 #include <stdio.h>
  3 #include <string.h>
  4
  5 #define QUEUELEN 15
  6
  7 typedef struct
  8 {
  9     char name[10];
 10     int age;
 11 }DATA;
 12
 13 typedef struct
 14 {
 15     DATA data[QUEUELEN];
 16     int head;
 17     int tail;
 18 }queueType;
 19
 20 queueType *initQueue()
 21 {
 22     queueType *q;
 23     if (q=(queueType *)malloc(sizeof(queueType)))
 24     {
 25         q->head=0;
 26         q->tail=0;
 27         return q;
 28     }
 29     else
 30         return NULL;
 31 }
 32
 33
 34 int queueEmpty(queueType *q)
 35 {
 36     int flag;
 37     flag=(q->head==q->tail);
 38     return flag;
 39 }
 40
 41 int queueFull(queueType *q)
 42 {
 43     int flag;
 44     flag=(q->tail==QUEUELEN);
 45     return flag;
 46 }
 47
 48 void clearqueue(queueType *q)
 49 {
 50     q->head=0;
 51     q->tail=0;
 52 }
 53
 54 void freequeue(queueType *q)
 55 {
 56     if (q!=NULL)
 57     {
 58         free(q);
 59     }
 60 }
 61
 62 int inqueue(queueType *q,DATA data)
 63 {
 64     if (q->tail==QUEUELEN)
 65     {
 66         printf("the queue if full!\n");
 67         return 0;
 68     }
 69     else
 70     {
 71         q->data[q->tail++]=data;
 72         return 1;
 73     }
 74 }
 75
 76 DATA outqueue(queueType *q)
 77 {
 78     if (queueEmpty(q))
 79     {
 80         printf("empty  queue!\n");
 81         exit(0);
 82     }
 83     else
 84         return q->data[q->head++];
 85 }
 86
 87 DATA readqueue(queueType *q)
 88 {
 89     if (queueEmpty(q))
 90     {
 91         printf("empty  queue!\n");
 92         exit(0);
 93     }
 94     else
 95         return q->data[q->head];
 96 }
 97
 98 int queuelength(queueType *q)
 99 {
100     int len;
101     len=q->tail-q->head;
102     return len;
103 }
104
105 int main()
106 {
107     queueType *queue;
108     DATA data,data1;
109     queue=initQueue();
110     printf("push queue!\n");
111     printf("input name,age to push data!\n");
112     do
113     {
114         scanf("%s%d",data.name,&data.age);
115         if (strcmp(data.name,"0")==0)
116         {
117             break;
118         }
119         else
120         {
121             inqueue(queue,data);
122         }
123     }while(1);
124
125     do
126     {
127         printf("pop stack operation!\n");
128         data1=outqueue(queue);
129         printf("the out queue data is (%s,%d)\n",data1.name,data1.age);
130     }while(1);
131
132
133     freequeue(queue);
134     return 0;
135
136 }
时间: 2024-08-10 19:19:17

算法8---队列及其实现的相关文章

【Java数据结构学习笔记之二】Java数据结构与算法之队列(Queue)实现

  本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型   队列同样是一种特殊的线性表,其插入和删除的操作分别在表的两端进行,队列的特点就是先进先出(First In First Out).我们把向队列中插入元素的过程称为入队(Enqueue),删除元素的过程称为出队(Dequeue)并把允许入队的一端称为队尾,允许出的的一端称为队头,没有任何元素的队列

数据结构与算法之队列、栈

除了数组.链表,线性的数据结构中还有很重要的几种结构:队列.栈. 队列,一种先进先出的数据结构(FIFO),其实队列可以看成是一个两个口的管道,从一个口进,另一个口出,先进去的必定得在另一个口先出去,否则后面的都出不去:栈,一种后进先出的数据结构(LIFO),栈更像是只有一个口的管道,只有一个开口可以进出,先进去的在底部,所以必须得让后进去的先出去,它才能出去. 实现队列和栈可以用顺序存储结构,也可以用链式存储结构.这里采用的是链表来实现,同时还有用两个栈实现一个队列和用两个队列实现一个栈的算法

Java数据结构与算法(4) - 队列(Queue和PriorityQ)

队列: 先进先出(FIFO). 优先级队列: 在优先级队列中,数据项按照关键字的值有序,关键字最小的数据项总在对头,数据项插入的时候会按照顺序插入到合适的位置以确保队列的顺序,从后往前将小于插入项的数据项后移.在图的最小生成树算法中应用优先级队列. 示例代码: package chap04.Queue; class Queue { private int maxSize; private long[] queArray; private int front; private int rear;

结构与算法(5)-----队列

前面我们讲解了并不像数组一样完全作为存储数据功能,而是作为构思算法的辅助工具的数据结构——栈,本文我们介绍另外一个这样的工具——队列.栈是后进先出,而队列刚好相反,是先进先出. 1.队列的基本概念 队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有元素时,称为空队列. 队列的数据元素又称为队列元素.在队列中插入一

算法导论-------------队列(queue)的简单实现

队列的基本操作包括入队enqueue和出队dequeue,队列有队头head和队尾tail指针.元素总是从队头出,从队尾入.采用数组实现队列时候,为了合理利用空间,可以采用循环实现队列空间的有效利用. #include<iostream> using namespace std; struct queue { int *q; int queuesize; int head; int tail; }; void init(queue* q, int n) { q->head = 0; q-

闭关修炼中 *** Java常用算法之 -- 队列结构

什么是队列结构: 队列结构和栈结构很相类似. 和栈结构一样是一种具有特殊的运算规则,从数据的逻辑结构看,队列结构其实 是一种线性结构. 从存储结构来进一步划分,也分为两类: 顺序队列结构:即使用一组地址连续的内存单元依次保存队列中的数据. 在 程序中,可以定义一个指定大小的结构数组作为队列. 链式队列结构:即用链表形式保存队列中各元素的值. 典型的队列结构: 在队列结构中允许对两端进行操作,但两端的操作不同.一端只能删除--队头,一 端只能插入--队尾. 队列的运算规则: 是按照先进后出(Fir

数据结构与算法——循环队列

今天总结循环队列. 什么是队列? 队列跟栈差不多,也是一种操作受限的线性表,只允许在线性表的一端进行插入操作,在另一端进行删除操作.插入的一端称为队尾,删除的一端称为队头,插入操作称为入队,而删除操作称作出出队,不含任何数据元素的队称为空队.队列也有两种实现方式,一种就是顺序存储,用数组实现,另一种是采用链表形式.今天总结顺序存储的循环队列. 什么是循环队列? 循环队列就是,当队尾指针移动到数组末尾时,下次再有元素入队时,可以将队尾指针重新移到数组前面没有元素的位置. 为什么要使用循环队列? 循

算法 之 队列的简单创建

相对于其他的数据结构,队列是十分简单的.这里也不多做讲解,只是用代码来写一个简单的队列,让实现插入和删除等操作: package Queue; public class Queue{ private int maxSize; //队列的容量存储大小 private long[] queueArray; //用数组来存储队列的对象 private int front; //队列的头指针 private int rear; //队列的尾指针 private int nElems; //用于表示队列的

数据结构和算法-007 队列

堆栈,另一个经典的数据结构.先进先出. 直接看代码吧,实现以下功能: 创建队列 插入值 取出值 值查看当前值 顺序插入 public class TheQueue {          private String[] queueArray;          private int queueSize;          private int front, rear, numberOfItems =0;          TheQueue(int size){                

图的广度度优先遍历算法运用队列主针对邻接表有向图

源代码如下: #include<iostream> using namespace std; #define MAX_VERTEX_NUM 20 typedef int EdgeData; typedef char VertexData; //顶点数据域 typedef struct node { // 边表节点 EdgeData cost; //边上d权值 int adjvex; //邻接点域 struct node *next; //下一边链接指针 }EdgeNode; typedef s