论坛首页 编程语言技术论坛

关于C循环队列。

浏览 1869 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-12  
C++
在win7中运行 microsoft visual c++ 6.0 编译一个c 的循环队列程序,但是当加入出队操作时,debug显示: vialation access,  难道我的程序哪里用了没有分配的内存,求答案!  程序如下:
#include <stdio.h>
#include <malloc.h>
//定义一个队列
typedef struct Queue
{
int* pBase;
int front;
int rear;
} QUEUE;

void init(QUEUE * pQ);
bool full_queue(QUEUE* pQ);
bool en_queue(QUEUE* pQ,int val);
void traverse_queue(QUEUE * pQ);
bool empty_queue(QUEUE * pQ);
bool out_queue(QUEUE* pQ,int * val);

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);
en_queue(&queue,6);

traverse_queue(&queue);
int val = 0;
if(out_queue(&queue,&val))
{
printf("出队成功,出队的数据是:%d\n",val);
}
else
{

printf("出队失败!\n");
}

traverse_queue(&queue);

return 0;
}

//初始化队列
void init(QUEUE * pQ)
{
pQ->pBase = (int *)malloc(sizeof(QUEUE));
pQ->front = 0;
pQ->rear = 0;
}

//判断队列是否是满的
bool full_queue(QUEUE* pQ)
{
return (pQ->rear+1)%6 == pQ->front;
}

//入队
bool en_queue(QUEUE* pQ,int val)
{
if(full_queue(pQ))
return false;

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

pQ->rear = (pQ->rear+1) % 6;
return true;
}

//遍历队列
void traverse_queue(QUEUE * pQ)
{
int temp = pQ->front;
while(temp != pQ->rear)
{
printf("%-3d",pQ->pBase[temp]);
temp = (temp +1) % 6;
}
printf("\n");
}
//判断队列是否为空
bool empty_queue(QUEUE * pQ)
{
return pQ ->front == pQ ->rear;
}

//出队
bool out_queue(QUEUE* pQ,int * val)
{
if(empty_queue(pQ))
return false;

//取出队列前面(front)的值,并向后移动一个位置
*val = pQ->pBase[pQ->front];
pQ->front = (pQ->front+1) % 6;

return true;
}


小弟我最近看数据结构的书,想加强对队列的认知。
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics