zoukankan      html  css  js  c++  java
  • 队列顺序存储

    队列是一种特殊的线性表
    队列仅在线性表的两端进行操作
    队头(Front):取出数据元素的一端
    队尾(Rear):插入数据元素的一端
    队列不同意在中间部位进行操作!


    queue经常使用操作
    销毁队列
    清空队列
    进队列
    出队列
    获取队头元素
    获取队列的长度

    队列也是一种特殊的线性表;能够用线性表顺序存储来模拟队列。

    主要代码:

    // seqqueue.h
    // 顺序存储队列API声明
    
    #ifndef _MY_SEQQUEUE_H_
    #define _MY_SEQQUEUE_H_
    
    typedef void SeqQueue;
    
    //  创建队列
    SeqQueue* SeqQueue_Create(int capacity);
    
    // 销毁队列
    void SeqQueue_Destroy(SeqQueue* queue);
    
    // 清空队列
    void SeqQueue_Clear(SeqQueue* queue);
    
    // 入队列
    int SeqQueue_Append(SeqQueue* queue, void* item);
    
    // 出队列
    void* SeqQueue_Retrieve(SeqQueue* queue);
    
    // 获取对头元素
    void* SeqQueue_Header(SeqQueue* queue);
    
    // 获取队列长度
    int SeqQueue_Length(SeqQueue* queue);
    
    // 获取队列容量
    int SeqQueue_Capacity(SeqQueue* queue);
    
    #endif //_MY_SEQQUEUE_H_
    

    // seqqueue.cpp
    // 顺序存储队列API实现
    // 调用了顺序存储表的API
    
    #include <stdio.h>
    #include "seqqueue.h"
    #include "seqlist.h"
    
    // 创建队列相当于创建一个链表
    SeqQueue* SeqQueue_Create(int capacity)
    {
    	return SeqList_Create(capacity);
    }
    
    // 销毁队列相当于销毁链表
    void SeqQueue_Destroy(SeqQueue* queue)
    {
    	SeqList_Destroy(queue);
    	return;
    }
    
    // 清空队列相当于清空链表
    void SeqQueue_Clear(SeqQueue* queue)
    {
    	SeqList_Clear(queue);
    	return;
    }
    
    // 入队列相当于在链表尾部插入元素
    int SeqQueue_Append(SeqQueue* queue, void* item)
    {
    	return SeqList_Insert(queue, item, SeqList_Length(queue));
    }
    
    // 出队列相当于删除链表0号位置的元素
    void* SeqQueue_Retrieve(SeqQueue* queue)
    {
    	return SeqList_Delete(queue, 0);
    }
    
    // 获取对头元素相当于获取链表0号位置元素
    void* SeqQueue_Header(SeqQueue* queue)
    {
    	return SeqList_Get(queue, 0);
    }
    
    // 获取队列长度相当于获取链表长度
    int SeqQueue_Length(SeqQueue* queue)
    {
    	return SeqList_Length(queue);
    }
    
    // 获取队列容量相当于获取链表容量
    int SeqQueue_Capacity(SeqQueue* queue)
    {
    	return SeqList_Capacity(queue);
    }

    // main.cpp
    // 顺序存储队列API的測试程序
    
    #include <stdio.h>
    #include "seqqueue.h"
    
    const int maxn = 10;
    
    void play()
    {
    	int i = 0, a[maxn];
    	SeqQueue *sq = NULL;
    
    	for (i = 0; i < maxn; ++i) {
    		a[i] = i + 1;
    	}
    
    	sq = SeqQueue_Create(20); // 创建队列
    
    	// 入队列
    	for (i = 0; i < maxn; ++i) {
    		SeqQueue_Append(sq, &a[i]);
    	}
    
    	// 获取队列属性
    	printf("header: %d
    ", *((int *)SeqQueue_Header(sq)));
    	printf("length: %d
    ", SeqQueue_Length(sq));
    	printf("capacity: %d
    ", SeqQueue_Capacity(sq));
    
    	// 出队列
    	while (SeqQueue_Length(sq)) {
    		int tmp = *((int *)SeqQueue_Retrieve(sq));
    		printf("%d
    ", tmp);
    	}
    	SeqQueue_Destroy(sq);
    
    }
    
    int main()
    {
    	play();
    
    	return 0;
    }

    有关顺序存储表的相关内容,请參看我的还有一篇博文:线性表的顺序存储设计和实现 - API函数实现

    具体project代码:Github

  • 相关阅读:
    淘宝从几百到千万级并发的十四次架构演进之路!
    19 个强大、有趣、好玩、又装B的 Linux 命令!
    Spring Boot实战:拦截器与过滤器
    初识zookeeper,linux 安装配置zookeeper
    Spring-boot:5分钟整合Dubbo构建分布式服务
    Spring-Boot:6分钟掌握SpringBoot开发
    Dubbo的使用及原理浅析.
    Java消息队列--ActiveMq 初体验
    关于Ubuntu 常用的简单指令
    IBM、HPUX、Solaris不同之处
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7224642.html
Copyright © 2011-2022 走看看