C语言编程学习:线性结构的两种常见应用之二:队列

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

线性结构的两种常见应用之二:队列

定义:一种可以实现先进先出的存储结构。

分类:

链式队列:以链表实现的队列

静态队列:以数组实现的队列。

静态队列通常都必须是循环队列:

静态队列为什么必须是循环队列?

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

如上图,一个队列,从0到8共9个元素,把-1放在位置0,-2放在位置1,依次。如果f(front指针)指向第一个(0),那么r(rear指针)则指向最后一个的下一个(8),如果f指向第一个元素的前一个元素(0前,f1),那么r则指向最后一个元素(r1)。以f指向第一个元素,r指向最后一个元素的后一个,如果在队列中增加一个元素,比如把-9放在位置8,那么r则指向8的下一个。如果是删除队列元素,比如删除-1,则f指向-2.也就是f指针用来删除元素,r指针用来增加元素。如果用传统的数组来实现队列,增加元素,r只能往上移,删除元素,f也是往上移。比如删除3个元素,则f指向-4,因为f只能增,那么导致-1、-2、-3这3个元素占据的内存位置将无法再使用。所以用传统数组来实现的队列必须是循环队列!循环

队列需要几个参数来确定?

需要两个参数来确定:front,rear

循环队列各个参数的含义 ,2个参数不同场合有不同的含义:

1)队列初始化:front和rear的值都是零;

2)队列非空;

front代表的是队列的第一个元素

rear代表队的最后一个有效元素的下一个元素

3)队列空front和rear的值相等,但不一定是零。

循环队列入队伪算法:两步:

1、将入队值存入r所指向的位置

2、将r指向下一个位置

错误写法:r=r+1;

正确写法:r=(r+1)%数组长度,实现r的循环

循环对列出队伪算法:一步:

f=(f+1)%数组长度

如何判断循环队列为空?如果f与r相等,则该队列为空。

如何判断循环队列已满:

两个方法:

1、增加一个表示队列内元素个数的参数;

2、队列少用一个元素,即长度为N的队列,只能放N-1个元素,if (r+1)%数组长度 == f 则队列满。

队列主要算法:

出队

入队

队列的具体应用:

所有和时间有关的操作都与队列有关

////////////////////////////////////////////////////////////////////////

///程序示例

#include

#include

#include

typedef struct Queue{

int * pBase;

int front;

int rear;

}QUEUE, * PQUEUE;

void init_queue(PQUEUE pq);

bool en_queue(PQUEUE pq,int val);

bool isFull(PQUEUE pq);

void traverse_queue(PQUEUE pq);

bool isEempty(PQUEUE pq);

bool out_queue(PQUEUE pq,int * val);

int main(void)

{

int outval;

QUEUE q;

init_queue(&q);

en_queue(&q,11);

en_queue(&q,13);

en_queue(&q,15);

en_queue(&q,17);

en_queue(&q,19);

en_queue(&q,21);

en_queue(&q,24);

traverse_queue(&q);

if(out_queue(&q,&outval))

{

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

printf("out queue success!the out value is %d ",outval);

}

else

{

printf("out queue failed! ");

}

traverse_queue(&q);

en_queue(&q,24);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

return 0;

}

void init_queue(PQUEUE pq)

{

pq->pBase = (int *)malloc(sizeof(int) * 6);

pq->front = 0;

pq->rear = 0;

}

bool isFull(PQUEUE pq)

{

if((pq->rear + 1)%6 == pq->front)

return true;

else

return false;

}

bool isEmpty(PQUEUE pq)

{

if(pq->front == pq->rear)

return true;

else

return false;

}

bool en_queue(PQUEUE pq,int val)

{

if(isFull(pq))

{

printf("队列已满 ");

return false;

}

else

{

pq->pBase[pq->rear] = val;

pq->rear = (pq->rear +1)%6;

return true;

}

}

bool out_queue(PQUEUE pq,int * val)

{

if(isEmpty(pq))

{

printf("the queue is empty! ");

return false;

}

* val = pq->pBase[pq->front];

pq->front = (pq->front + 1)%6;

return true;

}

void traverse_queue(PQUEUE pq)

{

int i = pq->front;

while(i != pq->rear)

{

printf("%d ",pq->pBase[i]);

i = (i + 1)%6;

}

printf(" ");

}

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

////////////////////////////////////////////////////////////////////////

这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

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

推荐阅读更多精彩内容