Black_Silence 发表于 2013-10-8 22:45:44

队 的问题

# 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求大神解释啊

Black_Silence 发表于 2013-10-9 19:21:17

:cry:cry没人吗

peng3726 发表于 2013-10-9 23:15:10

帮你顶起。。

随风听雨雪 发表于 2013-10-17 22:05:38

有人但我看不懂

哀叹yr 发表于 2013-10-19 13:57:03

好好好哈哈哈啊哈哈

欧阳柏 发表于 2013-10-25 16:00:28

全不懂:cry

严肃,走神中 发表于 2013-11-14 18:31:26

你定义的是指针数组,感觉只要开辟个首地址就行了的样子下面的好像不用申请的。。也不是太清楚

严肃,走神中 发表于 2013-11-14 18:57:40

说错了,你定义的是一个数组指针 *base。。开辟的是指针的的内存空间
在{
Pqueue->Base = val;
Pqueue->rear = (Pqueue->rear + 1) % 6
当Pqueue->rear + 1时就等base+1又开辟了一段空间
页: [1]
查看完整版本: 队 的问题