栈和队列--队列

1、队列与栈一样,都是操作受限,即都是只允许在头或尾进行操作。

2、栈与队列出入的区别

入栈是先加指针再入,入队是先入再加尾指针
出栈是先出再减指针,出队是先出再加尾指针。

3、队列的顺序存储类型


#define MaxSize 100
typedef struct{
	ElemType data[MaxSize];
	int front,rear;

}SqQueue;

顺序队列不能用Q.rear==MaxSize做判满条件。

4、循环队列

(1)顺序队列会有假溢出的缺点,即队尾出现上溢出。
所以引入循环队列,将顺序队列从逻辑上臆想成一个环。
(2)循环队列利用除法取余运算来实现
(3)循环队列中区分队空还是队满的方法
a、牺牲一个单元
队满条件:(Q.rear+1)%MaxSizeQ.front
队空条件: Q.front
Q.rear
队中元素个数:(Q.rear-Q.front+MaxSize)%MaxSize
b、类型中增设表示元素个数的成员
队满条件:Q.SizeMaxSize
队空条件:Q.Size
0;

c、增设tag数据成员
若因删除导致r.rearr.front,则为队空,若因插入导致r.rearr.front,则为队满。

5、循环队列的操作方法

注意:入队判满,出队判空,入队后队尾指针加1取模,出队后队首指针加1取模
初始化:

void InitQuene(SqQuene &Q){
	Q.rear==Q.front=0;
}

判队空:

bool isEmpty(SqQuene Q){
	if(Q.rear==Q.front) return 1;
	else return 0;

}

入队

bool EnQueue(SqQuene &Q,ElemType x){
	if((Q.rear+1)%MaxSize==Q.front)	return false;
	Q.data[Q.rear]==x;
	Q.rear==(Q.rear+1)%MaxSize;
	return true;
}

出队

bool DeQueue(SqQuene &Q,ElemType &x){
	if(Q.rear==Q.front) return false;
	x=Q.data[Q.front];
	Q.front=(Q.front+1)%MaxSize;
	return true;

}

6、链式队列

链式存储类型:

typedef struct{
	ElemType data;
	struct LinkNode *next;
}LinkNode;
typedef struct{
	LinkNode *front,*rear;
}LinkQueue

(1)初始化

void InitQueue(LinkQueue &Q){
	Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
	Q.front->next=null;

}

(2)判队空

bool IsEmpty(LinkQueue Q){
	if(Q.front==Q.rear) return true;
	else return false;

}

(3)入队

void EnQueue(LinkQueue &Q,ElemType x){
	LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
	s->data=x;
	s->next=null;
	Q.rear->next=s;
	Q.rear=s;
}

(4)出队

bool DeQueue(LinkQueue &Q,ElemType &x){
	if(Q.front=Q.rear) return false;
	LinkNode *p=Q.front->next;
	x=p->data;
	Q.front->next=p->next;
	if(Q.rear==p)
		Q.rear=Q.front;
	free(p);
	return true;
}

7、双端队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值