编译器果然对我很不友好,许是想多给我设置一些垫脚石吧。
1、头文件
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
2、节点的定义
//定义节点
typedef struct QNode{
int data;
struct QNode*next;
}QNode,*Queueptr;
typedef struct{
Queueptr front;
Queueptr rear;
}LinkQueue;
3、对列的初始化
//初始化队列
int InitQueue(LinkQueue&Q){
Q.front =Q.rear =(Queueptr)malloc(sizeof(QNode));
if(!Q.front )exit(-1);
Q.front ->next =NULL;
return 0;
}
4、入队
//初始化队列
int InitQueue(LinkQueue&Q){
Q.front =Q.rear =(Queueptr)malloc(sizeof(QNode));
if(!Q.front )exit(-1);
Q.front ->next =NULL;
return 0;
}
5、出队
error:
出队的时候在释放内存的时候出现了一个小bug,总是heap corruption detected……
原因是我在初始化时将Q.front =Q.rear =(Queueptr)malloc(sizeof©)写成了Q.front =Q.rear =(Queueptr)malloc(sizeof(Queueptr)),在定义节点的时候Queueptr定义的是QNode的指针类型。所以就会出现溢出的情况。
//出队
int DeQueue(LinkQueue Q){
Queueptr p=NULL;
if(Q.rear ==Q.front ) return -1;
p=Q.front ->next ;
Q.front->next =p->next ;
printf("%d\t",p->data );
if(Q.rear==p)Q.rear =Q.front ;//删除的元素是最后一个的情况
free(p);
return 0;
}
6、主函数
int _tmain(int argc, _TCHAR* argv[])
{
int arr[8],i;
LinkQueue Q;
InitQueue(Q);
for(i=0;i<8;i++)
printf("%d\t",arr[i]=rand()%10+15);
for(i=0;i<8;i++)
EnQueue(Q,arr[i]);
printf("\n");
while(Q.front->next !=NULL )
DeQueue(Q);
system("pause");
return 0;
}
最后在输出最后一个节点的元素时也总是出现访问冲突的情况,各种改各种调试最后换回最开始写的样子竟然访问不冲突了,真的搞不懂我的编译器,还能不能好好交流了。倔强的我还是不肯放弃,终于你向我投降了哈哈,虽然我的时间没了……