顺序队列

1. 头文件

#ifndef __SEQUEUE_H__
#define __SEQUEUE_H__

#include <stdio.h>
#include <stdlib.h>

#define MAXQUEUESIZE 10

typedef int dadatype;

typedef struct{
	dadatype data[MAXQUEUESIZE];
	int front;//队头下标
	int rear;//队尾下标
}sequeue;

//初始化
extern sequeue* sequeue_create();
//队列是否为空
extern int sequeue_empty(sequeue *s);
//队列是否为满
extern int sequeue_full(sequeue *s);
//入队
extern int sequeue_push(sequeue *s,int value);
//出队
extern dadatype sequeue_pop(sequeue *s);
//打印
extern void sequeue_show(sequeue *s);

#endif

2. 方法实现

2.1 创建队列

sequeue* sequeue_create(){
	sequeue *p;
	if((p=(sequeue*)malloc(sizeof(sequeue))) == NULL){
		printf("malloc failed\n");
		return NULL;
	}
	p->front = p->rear = 0;
	return p; 
}

2.2 判空

//判空
int sequeue_empty(sequeue *s){
	if(s->front == s->rear){
		return 1;
	}
	return 0;
}

2.3 判满

//判满,牺牲一个空间,队头指向队尾的下一个位置就为满
int sequeue_full(sequeue *s){
	if((s->rear+1)%MAXSIZE == s->front){
		return 1;
	}
	return 0;
}

2.4 入队

//入队
int sequeue_push(sequeue *s,int value){
	if(sequeue_full(s)){
		printf("the queue is full\n");
		return -1;
	}
	//先插入元素,队尾元素在加1
	s->data[s->rear] = value;
	s->rear = (s->rear + 1)%MAXSIZE;
	return 1;
}

2.5 出队

//出队
int sequeue_pop(sequeue *s){
	int p;
	if(sequeue_empty(s)){
		printf("the queue is empty\n");
		return -1;
	}
	p = s->data[s->front];
	s->front = (s->front + 1)% MAXSIZE;
	return p;
}

2.6 打印

//打印
void sequeue_show(sequeue *s){
	int i;
	//因为是循环队列,所以i的条件应该是不等于,而不是小于。
	for(i=s->front;i != s->rear;i=(i+1)%MAXSIZE){
		printf("%d\t",s->data[i]);
	}
	printf("\n");
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值