关于数据结构中free()函数使用的问题
如题 在写链式表,链栈,链队列时,总会遇到要删除一个节点或是一个队列的操作,是用free()的,可是小弟也不知道怎么一用就错,不用的话就对
下面以链式栈为例:
#include <stdio.h>#include<stdlib.h>#define Error 1#define Ok 0typedef int Status;typedef int QElemType;typedef struct QNode { QElemType data; struct QNode *next;}QNode,*QueuePtr;typedef struct{ QueuePtr front; QueuePtr rear;}LinkQueue;Status Ini_Queue(LinkQueue &Q){ Q.rear=(QNode*)malloc(sizeof(QueuePtr)); if(!Q.rear) {printf("输错了啊"); return Error;} Q.front=Q.rear; Q.rear->next=NULL; return Ok;}/*Status DestoryQueue(LinkQueue &Q){ while(Q.front) { Q.rear }}*/Status InQueue(LinkQueue &Q,QElemType e){ QueuePtr p; p=(QueuePtr)malloc(sizeof(QueuePtr)); if(!p) {printf("出错了啊"); return Error;} p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; return Ok;}Status Delete_Queue(LinkQueue &Q,QElemType &e ){ QNode *p; if(Q.front==Q.rear) return Error; printf("您删除的元素为:"); p=Q.front->next; e=p->data; Q.front->next=p->next; if(p==Q.rear) Q.rear=Q.front; /*p->next=NULL; free(p); */ // ?????????????????????????????? return Ok;}void print(LinkQueue Q){ LinkQueue p; p=Q; printf("您输入的队列为"); while(p.front!=p.rear) { printf("%d",p.front->next->data); p.front=p.front->next; } printf("\n");}void main(){ LinkQueue Q; int e,i; Ini_Queue(Q); printf("请输入队列的值"); scanf("%d",&e); while(e!=0) { InQueue(Q,e); scanf("%d",&e); } print(Q); printf("您是否要删除元素(1或0)"); scanf("%d",&i); if(i==1) { Delete_Queue(Q,e); printf("%d",e); } else printf("按任意键退出"); getchar(); getchar();