顺序队列的基本操作

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #define MAXSIZE 10
  4
  5 typedef int ElemType;
  6 //队列结构体
  7 typedef struct{
  8     ElemType data[MAXSIZE];
  9     int front,rear;//队头与队尾指针 (实际就是两个变量)
 10 }SqQueue;
 11 //初始化顺序队列
 12 int InitQueue(SqQueue *S){
 13     S->front=S->rear=0;
 14     //指针赋0,就是不指向任何对象,相当于NULL。
 15 }
 16 //销毁队列
 17 int  DestroyQueue(SqQueue *S){
 18
 19 }
 20 //判断队列为空
 21 int IsEmpty(SqQueue *S){
 22     if(S->front==S->rear){
 23         return 1;
 24     }
 25     return 0;
 26 }
 27 //判断队列以满
 28 int IsFull(SqQueue *S){
 29     if(S->rear==MAXSIZE){
 30         return 1;
 31     }
 32     return 0;
 33 }
 34 //进队运算算法
 35 int EnQueue(SqQueue *S){
 36     if(IsFull(S)){
 37         return printf("队满\n");
 38     }
 39     int n;
 40     printf("请输入你想入队的值\n");
 41     scanf("%d",&n);
 42     S->data[S->rear]=n;
 43     S->rear=S->rear+1;
 44 //    S->front=S->front+1;
 45     return printf("进队成功\n");
 46 }
 47 //输出队列元素
 48 int DisElem(SqQueue *S){
 49     if(IsEmpty(S)){
 50         return printf("队内是空无法输出\n");
 51     }
 52     int i=S->front;//i=0
 53     printf("队内元素有:\n");
 54     for(int n=0;i<S->rear;n++){
 55         printf("%3d",S->data[i]);
 56         i++;
 57     }
 58     printf("\n");
 59     return printf("输出成功");
 60 }
 61 //获取队首元素
 62 int GetHead(SqQueue *S){
 63     if(IsEmpty(S)){
 64         return printf("队内是空\n");
 65     }
 66     return printf("队首元素为\n%d",S->data[S->front]);
 67 }
 68 int GetLength(SqQueue *S){
 69     if(IsEmpty(S)){
 70         return printf("队内为空\n");
 71     }
 72     return printf("队的长度为%d",S->rear);
 73
 74 }
 75 //出队
 76 int DeleteQueue(SqQueue *S){
 77     if(IsEmpty(S)){
 78         return printf("队内是空无法输出\n");
 79     }
 80       int x;
 81 //    SqQueue *temp=S->front;
 82       x=S->data[S->front];
 83       S->front=S->front+1;
 84       return printf("出队的元素为%d",x);
 85 }
 86 int main(){
 87     SqQueue S;
 88     int n;
 89     InitQueue(&S);
 90     while(true){
 91   printf("|||||||||||||||||||||||||||||||||||||||||||||||\n");
 92   printf("||  1:入队                                  ||\n");
 93   printf("||  2:查看队伍元素                          ||\n");
 94   printf("||  3:查看队首元素                          ||\n");
 95   printf("||  4:查看队列长度                          ||\n");
 96   printf("||  2:出队                                  ||\n");
 97   printf("||  (输入-1退出系统)                         ||\n");
 98   printf("|||||||||||||||||||||||||||||||||||||||||||||||\n");
 99
100         printf("请输入你的操作序号\n");
101         scanf("%d",&n);
102         switch(n){
103             case 1:
104                 EnQueue(&S);
105                 break;
106             case 2:
107                 DisElem(&S);
108                 break;
109             case 3:
110                 GetHead(&S);
111                 break;
112             case 4:
113                 GetLength(&S);
114                 break;
115             case 5:
116                 DeleteQueue(&S);
117                 break;
118             case -1:
119                 return 0;
120
121         }
122
123
124
125     }
126 }

原文地址:https://www.cnblogs.com/longlonglonglong/p/10999767.html

时间: 2024-10-19 05:49:29

顺序队列的基本操作的相关文章

数据结构-循环顺序队列的基本操作

//循环顺序队列的基本操作 #include <iostream> #include <string.h> using namespace std; #define MAXLEN 8 #define datatype char #define Status int typedef struct{ datatype s[MAXLEN]; int front; //记录队首的指针 int rear; //记录队尾的指针 }SeqQueue; //初始化 Status InitSeqQu

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

数据结构Java实现07----队列:顺序队列&顺序循环队列.链式队列.顺序优先队列 一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-

数据结构(C实现)------- 顺序队列(循环队列之少用一个存储空间实现) .

上节已经提到有三种方法来实现循环顺序队列,其中第一种设立标识不常用,最常的就是后两种,上一节已经讨论了用计数器来实现循环顺序队列,这节就用第三种方法,也就是少用一个存储空间来实现循环顺序队列,其基本操作和用计数实现类同,下面是具体实现: 顺序队列(循环队列)类型描述: //顺序队列的类型描述 #define MAXSIZE 5 typedef int ElemType; typedef struct{ ElemType *data; int front,rear; }SqQueue; 基本操作:

队列的基本操作

队列的存储结构有两种:一种是线性表存储,一种是链式存储.用线性表存储时,要注意队列的长度有没有超过预先设置的大小,在这个程序中,队列的可以在存满的时候,自动增加队列的长度.用链表存储,则没有长度的限制.下面分别是这两种存储结构的实现. 线性表存储: #include <stdio.h> #include <stdlib.h> #define QUEUE_INIT_SIZE 10 #define QUEUE_REALLOCATION 2 typedef int ElemType; /

数据结构(C实现)------- 顺序队列(循环队列之计数器实现)

为了能充分的利用空间,解决顺序队列的"假溢出"问题,可以采用两种方法:一种是将数据向前移动,让空的存储单元留在队尾:另一种是将顺序队列构造成一个环状的空间,即将队列的数据区data[0....MAXSIZE-1]看成头尾相接的循环结构,使得data[0]接在data[MAXSIZE-1]之后,这就是循环队列. 这节就来实现循环顺序队列. 循环队列中的空闲的空间可以被利用,除非数组空间真的被队列元素全部占用,否则不会上溢.因此,队一此简单的应用外,真正实用的顺序队列是循环队列. 入队时,

数据结构(C实现)------- 顺序队列(非循环队列)

和栈相反,队列是一种先进先出的的线性表.它只允许在表的一端进行插入,而在另一端删除元素.这和我们日常生活中的队列是一致的,最早进入队列的元素最早离开.在队列中,允许插入的一端叫做队尾,允许删除的一端则稀烂为队头. 顺序队列,即队列的顺序存储结构.由于队列的队头和队尾的位置均发生变化,因此在队列顺序存储结构中,除了用一组地址连续的存储单元依次存放从队头到队尾的元素之外,还需要附设两个指针front和rear指向队头和队尾元素. 为了操作方便,在此约定:在非空队列中,队头指针front始终指向队头元

11. C#数据结构与算法 -- 顺序队列

理论基础: 队列(Queue)是插入操作限定在表的尾部而其它操作限定在表的头部进行的线性表.把进行插入操作的表尾称为队尾(Rear),把进行其它操作的头部称为队头(Front). 对列的操作是按照先进先出(First In First Out)或后进后出( Last In Last Out)的原则进行的,因此,队列又称为FIFO表或LILO表. 与栈一样,队列的运算是定义在逻辑结构层次上的,而运算的具体实现是建立在物理存储结构层次上的.因此,把队列的操作作为逻辑结构的一部分,每个操作的具体实现只

顺序队列实现任务以此执行-任务调度系列2

顺序队列实现任务以此执行的想法: public class TaskManage { //任务队列 private BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(10); private boolean running = false; public void start() { running = true; Thread t = new Thread(new OrderedJob()); t.s

数据结构6_顺序队列(循环队列)

本文实现了顺序队列,与链队列不同的是,顺序队列需要考虑一个问题, 问题情况如下, 解决办法:循环队列,当rear到分配的数组空间末尾时,转到数组头 但是当q.rear==q.front时,又如何区分一种是空队列,一种是满队列的情况呢 这里有两种方案 本次代码实现了第一种方法,同时设置了一个技术变量length,稍加改动便可实现第二个方法 代码如下: #include<iostream>using namespace std;//该顺序队列为循环队列,解决队尾指针达到最大值,队列中有空闲单元,但