队列的入队和出队操作

#include<iostream>

#include<stdio.h>

#include<string.h>

#include<conio.h>

using namespace std;

typedef struct student{

int data;

struct student *next;

}node;

typedef struct linkqueue

{

node *first, *rear;

}queue;

//队列的入队

queue *insert(queue *HQ, int x)

{

node *s;

s = (node*)malloc(sizeof(node));

s->data = x;

s->next = NULL;

if (HQ->rear == NULL)

{

HQ->first = s;

HQ->rear = s;

}

else

{

HQ->rear->next = s;

HQ->rear = s;

}

}

//队列出队

queue *del(queue *HQ)

{

node *p;

int x;

if (HQ->first == NULL)

{

printf("\n yichu");

}

else

{

x = HQ->first->data;

p = HQ->first;

if (HQ->first == HQ->rear)

{

HQ->first = NULL;

HQ->rear = NULL;

}

else

{

HQ->first = HQ->first->next;

free(p);

}

return (HQ);

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-03 15:30:58

队列的入队和出队操作的相关文章

循环队列的顺序存储和入队出队操作

今天看图的广度优先遍历的时候,发现用到了循环队列,补一下循环队列的知识,参考<大话数据结构>的P116~117,自己写了一个简单的测试例子便于理解. 首先需要理解以下三条公式. front是队头元素的下标,rear是队尾元素后一位的下标.(书上用头指针和尾指针,front和rear并不是指针,个人觉得不太好) 1.队列空的条件 显然front==rear 注意:如果队列不保留任何元素空间 满足front==rear的情况下,可能是队列空,也可能是队列满.所以为了方便,本文讨论的是采用保留一个元

编程实现队列的入队/出队操作

思路:队列其实也是一个链表,只是队列还有两个特殊的结点,一个指向队头,一个指向队尾.先设计数据结构,如下 typedef struct student * PNode; typedef struct linkqueue * Pqueue; typedef struct student { int data; PNode next; }Node; typedef struct linkqueue { PNode first; PNode rear; }queue; 1.入队操作其实是指向队尾的指针

链队列的初始化、入队、出队等操作实现

链队列的初始化.入队.出队等基本操作实现代码如下: #include<iostream> using namespace std; #define  TRUE 1 #define  FALSE 0 //链队列定义 typedef struct Node { int data;//数据域 struct Node *next;//指针域 }LinkQueueNode; typedef struct { LinkQueueNode *front;//队头指针front LinkQueueNode *

循环队列的初始化、入队、出队等基本操作

循环队列的初始化.入队.出队等基本操作,实现代码如下: #include<iostream> using namespace std; #define TRUE 1 #define FALSE 0 //循环队列的类型定义 #define MAXSIZE 50//队列的最大长度 typedef struct { int element[MAXSIZE];//队列的元素空间 int front;//头指针指示器 int rear;//尾指针指示器 }SeqQueue; //循环队列初始化 void

【C++】容器适配器实现队列Queue的各种功能(入队、出队、判空、大小、访问所有元素等)

适配器: 将一个通用的容器转换为另外的容器,所谓的容器,指的是存放数据的器具,像我们知道的顺序表和链表都是容器Container.举个例子解释一下吧,我们的电压都是220v,而像充电线就起到转换到合适的电压的作用.而这里,我们的主角就是将通用的链表结构转换为来实现队列Queue这一数据结构,(意思就是,链表还可以去实现其他的数据结构). 在线性表中,分为链表和顺序表,我们知道其中的差别: 链表:节点灵活,使得插入删除元素方便灵活,但是对于单链表若有节点指针_head._tail,查找元素较为麻烦

队列的存储结构和常见操作(c 语言实现)

一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设备运行速度不匹配的问题解决等,很多很多.其实队列的本质还是线性表!只不过是一种特殊的或者说是受限的线性表,是这样的: 1).限定在表的一端插入.另一端删除. 插入的那头就是队尾,删除的那头就是队头.也就是说只能在线性表的表头删除元素,在表尾插入元素.形象的说就是水龙头和水管,流水的水嘴是队头,进水的

入队/出队

入队/出队操作 #include<iostream> using namespace std; struct node { int data; node *next; }; struct queue { node *head; node *rear; }; //入队 queue *push_queue(queue *team,int x) { node *s=new node; s->data=x; s->next=NULL; if(team->rear==NULL) { t

循环队列:解决数组队列出队的时间复杂度

思路分析: 1.记录数组的队首和队尾的位置,当front 和tail指在一起的时候数组为空. 2.出队的时候front指针往后挪一位.这样出队操作就由数组队列的 O(N) 变成  循环队列的O(1)了. 让数组循环利用起来: 当前索引+1 再百分之我们数组的长度    比如我们到了最后一位7, 7+1 = 8 就是我们数组的长度    8对8 求余 = 0 就跟钟表一样   找到它的范围  然后让它在范围内循环.    1%12 = 1;  2 % 12 = 2; .... 11%12=11 1

队列基本操作—出队与入队

#include<stdio.h> #include<stdlib.h> typedef struct QNode { //构造结点类型 int data; struct QNode *next; }*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; void CreateQueue(LinkQueue &Q);//创建队列 void EnQueue(LinkQueue &Q,