【计算机本科补全计划】王道单科--队列的数组实现

正文之前

我发现哈,王道单科现在对我的作用真的很有限,以前看起来觉得挺难得东西,但是现在看书看多了觉得,也就那样?就以前考研的时候,为了加深理解一定要自己实现一遍,有兴趣看看的可以看看我的以前的考研的文章,跟今天这种比起来完全简直是被吊打!那时候瞻前顾后的实现栈,实现队列,后来C++ primer给我的不仅仅是容器的使用,更多的还是加深了对这些数据结构的认识。让我能驾轻就熟的认识这些概念。建议大家也多看看。

正文

#include <iostream>
using namespace std;
#define maxsize 20


typedef struct 
{
    int a[maxsize];
    int front;
    int rear;
} Queue,*ptrq;

void InitQueue(ptrq ptrs)
{
    ptrs->front=ptrs->rear=0;
}

void push_back(ptrq ptrs,int item)
{
    if(ptrs->front!=(ptrs->rear+1)%maxsize)   
        ptrs->a[ptrs->rear++]=item;
    else 
        {cout<<"The Queue is Full! Get out!"<<endl;return;};
}

int pop_front(ptrq ptrs)
{
    if(ptrs->front!=ptrs->rear)
        return ptrs->a[ptrs->front++];
    else 
    {
        cout<<"False ,the Queue is empty!"<<endl;
        return 0;
    }
}

bool IsEmpty(ptrq ptrs)
{
    if(ptrs->front==ptrs->rear)
    {
        cout<<"The Queue is Empty!!"<<endl;
        return false;
    }
    return true;
}

int main()
{
    ptrq test = new Queue;
    InitQueue(test);
    bool emp=IsEmpty(test);
    if(!emp)
        cout<<"Please fill this Queue"<<endl;
    for(int i=0;i<maxsize;++i)
        push_back(test,10*(i/4)+i%3+3);
    for(;test->front!=test->rear;)
        cout<<pop_front(test)<<endl;
    delete(test);  
    return 0;
}

注释我就不打了,但是还是解释下吧,解释完了就去吃饭!!!吃饭吃饭!!
因为下午有课,所以待会吃完饭,回去睡个觉就去教室,晚点吃饭有利于压缩娱乐时间!


首先,定义了基于数组的Queue结构体,并且表明了一个指向Queue的ptrq的指针类型别名。里面包含了一个数组用于存储数据,两个指针用下标的方式作为队头队尾指针之用。有想法的也可以自己改点别的结构。反正最后这几个是没法跑的。另外,maxsize是20,但是实际用于存储数据的只有19个数据块,因为要满足留出一个空地在队尾元素的下一个地方,想必熟悉新标准的朋友们就知道了。这就是新标准中随处可见的前闭后开的区间模型。好比迭代器,begin指向第一个元素,但是end指向最后一个元素的下一个地方,也称为尾后迭代器,这里的尾指针是同一个意思。[begin,end)

初始化队列的话就是把两个指针调整下,在new分配动态内存的过程中其实已经默认值初始化了,但是我们以防万一对不?另外还可以用这个瞬间置空整个队列, 岂不是很爽!!??

push_back() 以及 pop_front()这两个成员函数是很经典的么,顾名思义,从队尾插入,从队首删除。只是注意,队首队尾都是++,而且都提供了预判的,一旦队空或者队满,都会跳过读取过程!另外这个跟栈是很不同的,具体的仔细处希望大家伙好好揣摩。

IsEmpty()这个完全原理就更简单了!不说了!

另外,大家看新的C++11标准,气死人!!



容器都给你规划的好好地了。根本不用自己写!哎。

std::queue

C++ Containers library std::queue

Defined in header <queue>
template<
    class T,
    class Container = std::deque<T>
\> class queue;

The std::queue class is a container adapter that gives the programmer the functionality of a queue - specifically, a FIFO (first-in, first-out) data structure.

The class template acts as a wrapper to the underlying container - only a specific set of functions is provided. The queue pushes the elements on the back of the underlying container and pops them from the front.

Template parameters

T - The type of the stored elements. The behavior is undefined if T is not the same type as Container::value_type. (since C++17)

Container - The type of the underlying container to use to store the elements. The container must satisfy the requirements of SequenceContainer. Additionally, it must provide the following functions with the usual semantics:

  • back()
  • front()
  • push_back()
  • pop_front()

The standard containers std::deque and std::list satisfy these requirements.

Member types

  • Member type Definition
  • container_type Container
  • value_type Container::value_type
  • size_type Container::size_type
  • reference Container::reference
  • const_reference Container::const_reference

Member functions

(constructor) constructs the queue (public member function)
(destructor) destructs the queue(public member function)
operator= assigns values to the container adaptor (public member function)

Element access

front access the first element (public member function)
back access the last element (public member function)
pop removes the first element (public member function)
swap swaps the contents (public member function)

Non-member functions

  • operator==
  • operator!=
  • operator<
  • operator<=
  • operator>
  • operator>=

正文之后

我需要说明下,王道里的都是传入引用作为实参,我的是指针,这个是初期学习的时候受到了一些影响,严格来说其实引用更加安全而且好用,规避了C里面最难的指针,但是有些时候指针也是很好用的,各有长处吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • 接着上节 condition_varible ,本节主要介绍future的内容,练习代码地址。本文参考http:/...
    jorion阅读 14,761评论 1 5
  • 容器的概念所谓STL容器,即是将最常运用的一些数据结构(data structures)实现出来。容器是指容纳特定...
    饭饭H阅读 376评论 0 0
  • 接着上节 mutex,本节主要介绍atomic的内容,练习代码地址。本文参考http://www.cplusplu...
    jorion阅读 73,584评论 1 14
  • Array容器的相关知识,array是一个顺序容器,和其他标准容器相比它的特点是容器的大小固定,顺序存储。 1:a...
    郁闷天天阅读 390评论 0 0
  • JavaScript基本语法相关信息: 1.直接写入document.write(" 这是一个标题 "); 段落标...
    carsonsoding阅读 415评论 0 0