顺序队列

来源:互联网 发布:java sort排序算法 编辑:程序博客网 时间:2024/04/25 06:18

顺序队列

  • 顺序队列
    • 基本概念
    • 常用操作
    • 代码实现

基本概念

  • 队列是一种特殊的线性表
  • 队列仅在线性表的两端进行操作
  • 队头(Front):取出数据元素的一端(虽然用顺序表的头部和尾部效果一样,但这里我们使用顺序表的头部作为队列头部–从这里取出元素)
  • 队尾(Rear):插入数据元素的一端(这里我们使用顺序表的尾部作为队列尾部部–从这里插入元素))
  • 队列不允许在中间部位进行操作!
    这里写图片描述

常用操作

  • 销毁队列
  • 清空队列
  • 进队列
  • 出队列
  • 获取队头元素
  • 获取队列的长度

代码实现

  • 头文件
#ifndef __SEQQUEUE_H__#define __SEQQUEUE_H__#include <stdio.h>#include <stdlib.h>#include <memory.h>typedef void SeqQueue;//数据类型封装typedef void SeqQueueNode;//基于顺序表的栈和队列都不需要对数据对象进行包装                            //基于链式存储的线性表则需要将栈或者队列的业务节点包含在链表节点中/*创建指定容量的队列*/SeqQueue *SeqQueue_Create(int capacity);/*销毁队列*/void SeqQueue_Destroy(SeqQueue * queue);/*清空队列*/void SeqQueue_Clear(SeqQueue * queue);/*往队列插入元素--尾部插入*/int SeqQueue_Append(SeqQueue * queue, SeqQueueNode *item);/*从队列取出元素--头部取出*/SeqQueueNode *SeqQueue_Retrieve(SeqQueue * queue);/*获取队列头部的元素--以上三个函数得到的都是数据对象的首地址*/SeqQueueNode *SeqQueue_Header(SeqQueue * queue);/*队列长度*/int SeqQueue_Length(SeqQueue * queue);/*队列容量*/int SeqQueue_Capacity(SeqQueue * queue);#endif
  • 实现文件
#include "seqqueue.h"#include "seqlist.h"SeqQueue *SeqQueue_Create(int capacity){    return SeqList_Create(capacity);}void SeqQueue_Destroy(SeqQueue * queue){    SeqList_Destroy((SeqList*)queue);}void SeqQueue_Clear(SeqQueue * queue){    SeqList_Clear((SeqList*)queue);}int SeqQueue_Append(SeqQueue * queue, SeqQueueNode *item){    /*插入的时候,插入位置就是当前队列的长度对应的位置*/    return SeqList_Insert((SeqList*)queue, (SeqListNode*)item, SeqQueue_Length(queue));}SeqQueueNode *SeqQueue_Retrieve(SeqQueue * queue){    return SeqList_Delete((SeqList*)queue, 0);}SeqQueueNode *SeqQueue_Header(SeqQueue * queue){    return SeqList_Get((SeqList*)queue,0);}int SeqQueue_Length(SeqQueue * queue){    return SeqList_Length((SeqList*)queue);}int SeqQueue_Capacity(SeqQueue * queue){    return SeqList_Capacity((SeqList*)queue);}
  • 测试文件
#include "seqqueue.h"int main(void){    int  i = 0;    int a[10] = {0};    SeqQueue *queue = NULL;    queue = SeqQueue_Create(10);    if (queue == NULL)    {        printf("create error!\n");        return -1;    }    for (i = 0; i < 5;i++)    {        a[i] = i + 1;        SeqQueue_Append(queue, &a[i]);    }    printf("len:%d\n",SeqQueue_Length(queue));    printf("header:%d\n", *(int *)SeqQueue_Header(queue));    printf("capacity:%d\n", SeqQueue_Capacity(queue));    while (SeqQueue_Length(queue)>0)    {        printf("var:%d\n", *(int *)SeqQueue_Retrieve(queue));    }    SeqQueue_Destroy(queue);    system("pause");    return 0;}
0 0
原创粉丝点击