话不多少,数组实现上代码:
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<assert.h> using namespace std; const int maxsize=10; //循环队列的结构体 typedef struct{ int data[maxsize]; int front;//队列头 int rear;//队列尾 }sequeue; sequeue *sq=new sequeue;//定义全局指针并且分配内存 /*front指向队头元素的前一个位置 *rear指向队尾要插入元素的位置 *数组中能存放的数据要比数组的空间小1,是为了判断队列满的情况。 *定义值真是,sq->front。定义全局变量sequeue sq时,sq.front */ void SetEmpty(){//置空,为了第一个进入队列的元素的位置为0 sq->front=maxsize; sq->rear=maxsize; } bool isEmpty(){//判空 return (sq->rear==sq->front); } void EnQueue(int num){//进队,先判满,再移位后输入元素 assert((sq->rear+1)%maxsize!=sq->front); sq->rear=(sq->rear+1)%maxsize; sq->data[sq->rear]=num; } bool isFull(){//判满 return((sq->rear+1)%maxsize==sq->front); } int DeQueue(){//出队,先判空,再移位 assert(sq->front!=sq->rear); sq->front=(sq->front+1)%maxsize; int ndata=sq->data[sq->front]; return ndata; } int main(){ SetEmpty(); if(isEmpty()) cout<<"The queue is empty"<<endl; for(int i=0;i<9;i++) EnQueue(i); if(isFull()) cout<<"The queue is full"<<endl; for(int j=0;j<3;j++) cout<<DeQueue()<<"was removed"<<endl; system("pause"); return 1; }
链表实现,上代码
//队列链表方式的限制为表头删除表尾插入的单链表,显然 //单链表的头指针不便于在表尾做插入操作,所以我们需要加上一个尾指针 //于是一个链队列由一个头指针和一个尾指针唯一的确定。 struct node{ int data;//值 struct node* next;//链接指针 }; struct linkqueue{ struct node* front;//队头指针 struct node* rear;//队尾指针 }; //初始化 void initQueue(struct linkqueue *hq){ //hq=(linkqueue*)malloc(sizeof(linkqueue)); hq->front=hq->rear=NULL;//将队手和队尾指针置空 return; } //入队 void enQueue(struct linkqueue* hq,int x){ //申请新节点 struct node* newP; newP=(node*)malloc(sizeof(struct node)); if(newP==NULL){ cout<<"内存空间分配失败"<<endl; return; } newP->data=x; newP->next=NULL; if(hq->rear==NULL) { hq->front=newP; hq->rear=newP; }else{ hq->rear->next=newP; hq->rear=newP; } return; } //出队 int outQueue(linkqueue* hq){ struct node* p; int x; if(hq->front==NULL){ cout<<"队列为空无法删除"<<endl; return -1; } x=hq->front->data; p=hq->front; if(hq->front==hq->rear){//判断是否只有一个节点 hq->front=NULL; hq->rear=NULL; } else{ hq->front=p->next; } free(p); return x; } //取队首元素 int peekQueue(struct linkqueue* hq){ if(hq->front==NULL){ cout<<"队列为空无法删除"<<endl; exit(1); } return hq->front->data; } //检查队列是否为空 bool emptyQueue(struct linkqueue* hq){ if(hq->front==NULL) return true; else return false; } //清除队列所有元素 void clearQueue(struct linkqueue *hq){ struct node* p=hq->front; while(p!=NULL){ hq->front=hq->front->next; free(p); p=hq->front; } } int main(){ struct linkqueue q; int a[8]={3,5,8,27,9,30,15,22}; initQueue(&q); for(int i=0;i<8;i++) enQueue(&q,a[i]); cout<<outQueue(&q)<<endl; while(!emptyQueue(&q)) cout<<outQueue(&q)<<endl; if(emptyQueue(&q)) cout<<"队列已为空"<<endl; else clearQueue(&q); system("pause"); return 1; }
发表评论
-
析构函数为虚函数的原因
2012-09-09 11:42 832我们知道,用C++开发的时候,用来做基类的类的析构函数 ... -
hash的应用
2012-08-31 23:02 961第一部分为一道百度面试题Top K算法的详解;第二部分为关 ... -
微软智力题
2012-08-29 19:59 567第一组1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有 ... -
C++不能被继承的类
2012-08-27 20:16 1059一个类不能被继承, ... -
括号对齐问题
2012-08-27 10:47 1410解法一:左右括号成一对则抵消 可以 ... -
树的遍历
2012-08-19 10:43 719/****************************** ... -
堆排序
2012-08-16 14:24 884堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全 ... -
多态赋值
2012-08-14 16:16 832#include <iostream> usi ... -
static变量与static函数(转)
2012-08-13 10:15 746一、 static 变量 static变量大致分为三种用法 ... -
不用sizeof判断16位32位
2012-08-10 15:21 1704用C++写个程序,如何判断一个操作系统是16位还是3 ... -
找出连续最长的数字串(百度面试)
2012-08-09 15:15 1146int maxContinuNum(const char*in ... -
顺序栈和链栈
2012-08-06 10:01 799顺序栈:话不多说直接上代码 #include ... -
KMP算法详解
2012-08-02 21:40 887KMP算法: 是在一个“主文本字符串” ... -
字符串的最长连续重复子串
2012-08-01 15:05 9779两种方法: 循环两次寻找最长的子串: <方法一> ... -
寻找一个字符串连续出现最多的子串的方法(转)
2012-07-31 21:19 986算法描述首先获得后缀数组,然后1.第一行第一个字符a,与第二行 ... -
字符串的循环移位
2012-07-31 16:52 975假设字符串:abcdefg 左循环两位:cdefgab 右 ... -
一次谷歌面试趣事(转)
2012-07-31 15:26 767很多年前我进入硅谷 ... -
约瑟夫环问题(循环链表)
2012-07-30 21:31 1290题目描述:n只猴子要选大王,选举方法如下:所有猴子按 1, ... -
面试之单链表
2012-07-30 20:18 7281、编程实现一个单链表的建立/测长/打印。 ... -
多重继承内存地址问题
2012-07-30 15:55 727[cpp] view plaincopy ...
相关推荐
"go语言通过数组和链表的方式实现队列" 从给定的文件信息中,我们可以生成以下知识点: 1.队列的定义:队列是一种特殊的线性表,只能在队列的尾部添加元素,在队列的头部删除元素,先进先出(FIFO)。 2.go语言中...
本话题主要探讨了两种常用的数据结构——数组和链表——在实现队列这一线性数据结构时的应用。队列是一种先进先出(First In First Out, FIFO)的数据结构,它的主要操作包括入队(enqueue)、出队(dequeue)以及...
本篇文章将深入探讨如何用数组和链表两种数据结构来实现队列。 ### 数组实现队列 数组实现队列的优势在于访问速度快,因为数组是连续存储的,可以通过下标直接访问元素。但数组的大小是固定的,所以在创建时需要...
常见的数据结构(栈、队列、数组、链表和红黑树) 数组和链表.pdf
约瑟夫环问题,也被称为...无论是数组还是链表实现,都需要对数据结构有深入的理解,并能够根据问题特点灵活选择合适的方法。在实际应用中,我们可以根据问题规模、内存限制以及计算性能要求,来决定采用哪种实现方式。
队列和栈可以使用数组或链表实现,而数组和链表可以用于实现队列和栈。 数组、链表、队列、栈四种数据结构之间存在着紧密的联系,但同时也存在着许多区别。正确地选择和使用这些数据结构是非常重要的,它可以提高...
链表实现的循环队列在处理满队列和空队列时与数组实现有所不同,因为链表的节点可以动态增加和删除,所以无需像数组那样进行特殊的重置操作。 在C++中,模板(template)是泛型编程的重要工具,它可以让我们创建...
数组、链表、堆栈和队列、线性表和顺序表 数组、链表、堆栈和队列是最基本的数据结构,任何程序都会涉及到其中的一种或多种。...理解不同的数据结构可以帮助开发者更好地设计和实现程序,提高程序的效率和可读性。
- **链表的优势**:适合需要频繁进行插入和删除操作的应用场景,如任务队列管理等。 - **链表的劣势**:查询效率低,不适合需要频繁查询数据的场景。 #### 关于顺序表的改进 对于基于数组的顺序表,可以通过引入...
在C语言中,数组形链表是一种特殊的数据结构,它结合了数组的高效访问和链表的灵活扩展性。这种数据结构通常用于处理动态数组,其中元素可以方便地添加或删除,而不需要像传统数组那样预先知道确切的大小。本文将...
数组、链表、队列、栈数据结构特点,各自优点和缺点 在计算机科学中,数据结构是指用于组织和存储数据的方式。常见的数据结构包括数组、链表、队列、栈等。每种数据结构都有其特点、优点和缺点,本文将对这些数据...
在 Java 中,LinkedList 的内部使用双端链表队列原理实现,而 ArrayList 的内部使用双端数组队列原理实现。 Java 实现自定义双端队列可以通过链表和数组两种方式实现,双端队列可以充当单端队列,也可以用于充当栈...
在队列的代码中,引用了链表的代码
循环数组实现队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列的操作受限制,和栈一样,它是一种操作受限制的线性表。进行插入操作的...
算法讲解013【入门】队列和栈-链表、数组实现
链表还适用于实现某些特定的数据结构,如堆栈、队列和图形数据结构。 在编程语言中,数组通常被内置支持,易于理解和使用,而链表则通常需要通过指针和结构体等概念来实现,相对复杂。但考虑到其灵活性,链表在处理...
队列可以使用多种方式实现,包括链表和数组。本文将深入探讨两种队列实现方式:循环链表队列和循环数组队列,并通过代码示例进行详细解析。 #### 循环链表队列 循环链表队列是一种使用链表实现的队列,其中最后一...
这个实验报告展示了如何用数组模拟循环链表解决约瑟夫环问题,同时也体现了问题求解的算法设计和实现能力。通过此实验,可以学习到数组操作、循环控制以及动态更新数据结构的方法。在实际编程中,类似的思路可以应用...