队列的基本操作

1. 熟悉队列的基本概念 
队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素,允许
允许插入的一端叫队尾,允许删除的一端叫对头.
2. 队列的性质 
队列具有先进先出的特性。
3. 队列存储结构 
 顺序队列 
 队头指针不动----要大量搬移元素 
 缺陷:操作时如果出队列比较多,要搬移大量元素。
 队头指针移动----存在假溢出 
 假溢出:顺序队列因多次入队列和出队列操作后出现的尚有存储空间但不能再进行入队列操作
的溢出。
真溢出:顺序队列最大存储空间已经存满而有要求进入队列操作所引起的溢出。
 循环队列 
 循环队列如何解决队列空或者满? 
 1.少用一个存储单元
 2.设置一个标志位
 3.设置一个计数器


 链式队列---用链表作为队列的底层数据结构 
实现链式队列的以下操作: 
typedef int DataType; 
typedef struct Node 

DataType _data; 
struct Node* _pNext; 
}Node, *PNode; 


typedef struct Queue 

PNode _pHead; 
PNode _pTail; 
}Queue; 


// 队列的初始化 
void QueueInit(Queue* q); 


// 入队列 
void QueuePush(Queue* q, DataType data); 


// 出队列 
void QueuePop(Queue* q); 


// 取队头元素 
DataType QueueFront(Queue* q); 


// 取队尾元素 
DataType QueueBack(Queue* q); 


// 获取队列中元素的个数 
int QueueSize(Queue* q); 


// 检测队列是否为空 
int QueueEmpty(Queue* q); 
#include"Queue.h"
#include<stdio.h>
#include<assert.h>
#include<malloc.h>
typedef int DataType; 
typedef struct Node 

DataType _data; 
struct Node* _pNext; 
}Node, *PNode; 


typedef struct Queue 

PNode _pHead; 
PNode _pTail; 
}Queue; 
PNode BuyNode(DataType data)
{
PNode pNewNode=(PNode*)malloc(sizeof(Node));
if(NULL==pNewNode)
{
assert(0);
return NULL;
}
pNewNode->_data=data;
pNewNode->_pNext=NULL;
return pNewNode;
}
  
void QueueInit(Queue* q) //队列的初始化 
{
assert(q);
q->_pHead=q->_pTail=NULL;


}
 
void QueuePush(Queue* q, DataType data) //入队列
{
assert(q);
if(NULL==q->_pHead)
{
q->_pHead=q->_pHead=BuyNode(data);
}
else
{
q->_pTail->_pNext=BuyNode(data);
q->_pHead=q->_pTail->_pNext;
}


 
void QueuePop(Queue* q)// 出队列
{PNode pDelNode=q->_pHead;
//assert(q);
if(!pDelNode)
   
{
q->pHead=pDelNode->_pNext;
free(pDelNode);
}
    
}
 
DataType QueueFront(Queue* q) //取队头元素
{
assert(q);
return q->_pHead->_data;
}
 
DataType QueueBack(Queue* q)// 取队尾元素
{ assert(q);
return q->_pTail->_data;
}
 
int QueueSize(Queue* q)//获取队列中元素的个数 
{
PNode pCur=q->pHead;
int count=0;
while(pCur)
{
count++;
   pCur=pCur->_pNext;
}
return count;

}
 
int QueueEmpty(Queue* q)//检测队列是否为空 
{
return NULL==q->_pHead;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值