顺序队列基本操作的实现

原创 2018年04月15日 21:17:22

顺序队列和前面的顺序表一样,相当于一个数组,不同的是它的有效区间,当数组走到最大时,又会从头开始,这里用head 和tail两个下标来表示头和尾,即当tail到达size时,tail又从0开始,head也是同样的道理;

代码如下:

seqqueue.h

#pragma once

#define SeqQueueMaxSize 1000

typedef char SeqQueueType;

typedef struct SeqQueue{
	SeqQueueType data[SeqQueueMaxSize];
	size_t head;
	size_t tail;
	size_t size;
}SeqQueue;
//初始化
void SeqQueueInit(SeqQueue* q);
//销毁
void SeqQueueDestroy(SeqQueue* q);
//入队列
void SeqQueuePush(SeqQueue* q,SeqQueueType value);
//出队列
void SeqQueuePop(SeqQueue* q);
//去队首元素
int SeqQueueFront(SeqQueue* q, SeqQueueType* value);

seqqueue.c

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

void SeqQueueInit(SeqQueue* q){
	if(q == NULL){
		//非法输入
		return;
	}
	q->size = 0;
	q->head = 0;
	q->tail = 0;
	return;
}

void SeqQueueDestroy(SeqQueue* q){
	if(q ==	NULL){
		return;
	}
	q->size = 0;
	q->head = 0;
	q->tail = 0;
	return;
}

void SeqQueuePush(SeqQueue* q,SeqQueueType value){
	if(q ==	NULL){
		return;
	}
	if(q->size >= SeqQueueMaxSize){
		//队列满了
		return;
	}
	q->data[q->tail] = value;
	q->tail++;
	if(q->tail >= SeqQueueMaxSize){
		q->tail = 0;
	}
	q->size++;
	return;
}

void SeqQueuePop(SeqQueue* q){
	if(q == NULL){
		//非法输入
		return;
	}
	if(q->size == 0){
		//空队列
		return;
	}
	q->head++;
	if(q->head >= SeqQueueMaxSize){
		q->head = 0;
	}
	q->size--;
	return;
}

int SeqQueueFront(SeqQueue* q,SeqQueueType* value){
	if(q == NULL){
		//非法输入
		return 0;
	}
	if(q->size == 0){
		//空队列
		return 0;
	}
	*value = q->data[q->head];
	return 1;
}

test.c

#include <stdio.h>
#define TEST_HEADER printf("\n==========================%s==========================\n",__FUNCTION__)

void SeqQueuePrintChar(SeqQueue* q,const char* msg){
	printf("[%s]\n",msg);
	size_t i =q-> head;
	for(i=q->head;i<q->tail;i++){
		printf("[%c] ",q->data[i]);
	}
	printf("\n");
}

void TestQueue(){
	TEST_HEADER;
	SeqQueue queue;
	SeqQueueInit(&queue);
	SeqQueuePush(&queue,'a');
	SeqQueuePush(&queue,'b');
	SeqQueuePush(&queue,'c');
	SeqQueuePush(&queue,'d');
	SeqQueuePrintChar(&queue ,"入队列四个元素");

	SeqQueuePop(&queue);
	SeqQueuePop(&queue);
	SeqQueuePrintChar(&queue,"出队列两个元素");
	SeqQueuePop(&queue);
	SeqQueuePop(&queue);
	SeqQueuePrintChar(&queue,"再出队列两个元素");

	SeqQueueType value;
	int ret = 0;
	ret = SeqQueueFront(&queue,&value);
	printf("ret expeted 1,actual %d\n",ret);
	printf("value expected a,actual %c\n",value);
}

int main(){
	TestQueue();
	return 0;
}

顺序队列(循环队列)基本操作实现 C语言

只写了几个主要的操作,销毁,清空等没有写 #include #include #define OK 1 #define ERROR 0 #define QUEUE_SIZE 100 typ...
  • D_Fur
  • D_Fur
  • 2012-08-19 13:22:17
  • 3737

java实现的顺序队列

  • 2013年05月15日 19:41
  • 919B
  • 下载

顺序队列(循环队列)的常用操作(C语言)

  • 2013年10月19日 16:43
  • 3KB
  • 下载

数据结构--顺序队列基本操作

在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放队列头到队列尾的元素之外,常常另设两个指针front和rear分别表示队列头元素及队列为的元素。 这里我们做约定:初始化建立空队列时,令f...
  • longgongshiye
  • longgongshiye
  • 2013-07-08 18:09:17
  • 680

线性表----队列(顺序表示)的基本操作

#include #include #include #define MAX 100 /** *@Name:线性表--队列--顺序队列 *@Description:顺序队列的创建,元素的...
  • oFanJunBin
  • oFanJunBin
  • 2014-08-10 17:48:48
  • 1394

顺序循环队列基本操作(入队,出队,清空,销毁,历遍)

#include #include #include #define MAXSIZE 5 #define OVERFLOW -1 #define OK 1 #define T...
  • wfdtxz
  • wfdtxz
  • 2012-10-07 16:06:04
  • 19095

顺序队列和链队列的各种操作

一. 先说顺序队列 /*********************************************************** 顺序队列的各种操作13-4-1.cpp 1.初始化队...
  • eric802
  • eric802
  • 2011-08-22 09:15:22
  • 5883

Java简单队列的实现

/** * */ package com.handy.ds; /** * @author handy * */ public class SimpleQueue { // 队列最大长...
  • handy792553306
  • handy792553306
  • 2012-03-19 02:06:41
  • 608

顺序队列的java实现

import java.util.Arrays;public class SequenceQueue { private int DEFAULT_SIZE = 10; // 保存数组的...
  • gaochao1995
  • gaochao1995
  • 2016-02-15 18:51:01
  • 194

数据结构实现顺序循环队列

  • 2014年09月16日 16:22
  • 2KB
  • 下载
收藏助手
不良信息举报
您举报文章:顺序队列基本操作的实现
举报原因:
原因补充:

(最多只允许输入30个字)