队 的问题
# include <stdio.h># include <MALLOC.H>
typedef struct Queue
{
int *Base;//存放数据的数组
int front;
int rear;
}QUEUE, *PQUEUE;
void init(PQUEUE);//初始化
void en_queue(PQUEUE, int);//入队
void traveres(PQUEUE);//遍历
void out_queue(PQUEUE);//出队
bool full_queue(PQUEUE);//是否为满
bool empty_queue(PQUEUE);//是否为空
int main(void)
{
QUEUE queue;//建立一个队列并没有初始化
init(&queue);
en_queue(&queue, 1);
en_queue(&queue, 2);
en_queue(&queue, 3);
en_queue(&queue, 4);
en_queue(&queue, 5);
printf("%d\n", queue.Base);
//只能存放5个值以为有一个值当做未满所以有效元素为6-1
traveres(&queue);
out_queue(&queue);
traveres(&queue);
return 0;
}
void init(PQUEUE Pqueue)
{
Pqueue->Base = (int *)malloc(sizeof(int) * 6);
Pqueue->front = 0;//相等为空
Pqueue->rear = 0;//
if (Pqueue->Base == NULL)
{
printf("初始化失败\n");
}
else
{
printf("初始化成功\n");
}
}
bool full_queue(PQUEUE Pqueue)
{
if ((Pqueue->rear + 1) % 6 == Pqueue->front)
{
return true;
}
else
{
return false;
}
}
void en_queue(PQUEUE Pqueue, int val)
{
if (full_queue(Pqueue))
{
printf("队列已满\n");
}
else
{
Pqueue->Base = val;
Pqueue->rear = (Pqueue->rear + 1) % 6;
}
}
void traveres(PQUEUE Pqueue)
{
int i = Pqueue->front;
while(i != Pqueue->rear)
{
printf("%d\n", Pqueue->Base);
i = (i + 1) % 6;
}
printf("\n");
}
bool empty_queue(PQUEUE Pqueue)
{
if (Pqueue->front == Pqueue->rear)
{
return true;
}
else
{
return false;
}
}
void out_queue(PQUEUE Pqueue)
{
if (empty_queue(Pqueue))
{
printf("队列为空\n");
}
else
{
Pqueue->front = (Pqueue->front + 1) % 6;
}
}
这是第一个版本的代码 结果会输出1,2,3,4,5数组长度是 Pqueue->Base = (int *)malloc(sizeof(int) * 6); 6
现在我就只改一个地方 Pqueue->Base = (int *)malloc(sizeof(int) * 1); 数组长度为1
但是尼玛为什么还是输出1,2,3,4,5求大神解释啊
:cry:cry没人吗 帮你顶起。。 有人但我看不懂 好好好哈哈哈啊哈哈 全不懂:cry 你定义的是指针数组,感觉只要开辟个首地址就行了的样子下面的好像不用申请的。。也不是太清楚 说错了,你定义的是一个数组指针 *base。。开辟的是指针的的内存空间
在{
Pqueue->Base = val;
Pqueue->rear = (Pqueue->rear + 1) % 6
当Pqueue->rear + 1时就等base+1又开辟了一段空间
页:
[1]