我在Internet上阅读时碰巧遇到了一个基于数组的队列的实现:
#include <stdio.h>
#include <stdlib.h>
typedef int item_t;
typedef struct {item_t *base;
int front;
int rear;
int size;} queue_t;
queue_t *create_queue(int size)
{ queue_t *qu;
qu = (queue_t *) malloc( sizeof(queue_t) );
qu->base = (item_t *) malloc( size * sizeof(item_t) );
//printf("q->base address %p\n",qu->base);
qu->size = size;
qu->front = qu->rear = 0;
return( qu );
}
int enqueue( item_t x, queue_t *qu)
{
printf("modulo result %d\n",((qu->rear +2)% qu->size));
if ( qu->front != ((qu->rear +2)% qu->size) )
{ qu->base[qu->rear] = x;
qu->rear = ((qu->rear+1)%qu->size);
return( 0 );
}
else
return( -1 );
}
下面是代码中的create queue和enqueue逻辑。最初,front和Freal为零。qu->front和((qu->free+2)%qu->size)
不相等,因此项目将被排队。我不明白为什么在这个逻辑中使用2-((qu->freed+2)%qu->size)
?
因为如果使用(qu->rear+1)%qu->size,并且一个元素将在几乎满的队列中排队,那么q->brear将递增(这是在行“qu->brear=((qu->rear+1)%qu->size);”中完成的)您将得到这样一种情况,即满队列和空队列将无法区分。
假设队列大小为4个元素,然后添加4个实际元素,最终“front”将指向第0个元素(因为front从未更改),“frear”将再次指向第0个元素,因为“freal”增加了4次,在最后一次增加时它被包装回0。在本例中,front和Freal指向第0个元素,这与开始时队列为空时相同,您无法判断队列是满的还是空的,这是一个问题(有时)。
这段代码可以稍作更改,以反映这样一个事实:在设置队列时,队列大小参数并不意味着您创建了大小为N的队列,而是大小为n-1的队列....
数组是编程语言中用来存储元素的集合。在 C 语言中,集合是储存相同类型元素的集合。并且可以通过一个名称来来访。 -------------------------------------------- | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | …… | N-1 | -------------------------------------------- 第一个元素
数组是一种内存分配的形式,数组是定义了一个连续的空间,与指针类似。 数组定义方式 类型 数组名[数组大小];//类型为每个空间的大小,我们通过数组名和下标访问数据,数组名指向存储数据的首地址,但是我们不可以改变数组名指向的地址。数组大小只有在定义的时候生效,定义之后不可以被改变。 int a[100]; //申请了一个名叫a的数组,它包含了100个整型。 数组的访问 我们可以通过数组的下标访问数
本文向大家介绍C语言实现循环队列,包括了C语言实现循环队列的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现循环队列的具体代码,供大家参考,具体内容如下 注意事项: 1、循环队列,是队列的顺序表示和实现。因为是尾进头出,所以和顺序栈不同的是需要将顺序队列臆造成一个环状的空间,以便在尾部添加满之后从头部空位开始插入。 2、也可以使用数组队列,也就是不能动态增长的顺序队列,这样不
在之前的 C 语言标准中,逻辑运算符是表示两个数值之间逻辑关系的运算符。通常用 0 和 1 来表示假值和真值。但是在 C 语言中会认为非 0 的数值在逻辑运算中都为 1 。逻辑运算的返回值也是整数型,不是 0 就是 1 ,这点和其他很多编程语言是不同的。 但是,在 C99 标准中引入了布尔类型。所以 C 语言中的逻辑运算就简单了很多。要想使用布尔类型,需要引入 stdbool.h 这个库即可。但是
有人知道为什么这个循环总是针对不同于1或0的值,以及如何避免在输入字符时出现无休止的循环吗? }
主要内容:逻辑运算的结果,优先级现在假设有这样一种情况,我们的软件比较特殊,要求使用者必须成年,并且成绩大于等于60,该怎么办呢? 或许你会想到使用嵌套的 if 语句,类似下面这样的代码: 这种方法虽然能够行得通,但不够简洁和专业,我们可以将其压缩为一条 if else 语句: 是一个新的运算符,称为 逻辑运算符,表示 和 两个条件必须同时成立才能执行 if 后面的代码,否则就执行 else 后面的代码。 在高中数学中,我们就学