读书笔记--栈和队列
栈是个顺序的空间结构,其主要原理是开辟一个初始的、连续的空间以供节点的插入,栈节点之间并没有逻辑上的关联,也就是说,上一个节点并没有存储下一个节点的地址,也就是指针。所以栈的清空可以直接将头指针指向尾指针所指向的,下一个节点插入将覆盖掉原来的数据。简而言之,删除一个节点是将该节点从栈中删除,而并没有删除这个节点的数据。而队列不同,队列节点与节点之间有逻辑上的关联,上一个节点的指针域存储下一个节点的地址,而他们之间的访问则要遍历整个队列。所以清空队列需要依次清空,而不能直接在头指针和尾指针进行操作。
1 typedef struct QNode{ 2 QElemType date;//节点的数据域,QElemType是任何类型的数据 3 struct QNode *next;//节点的指针域,指向下一节点 4 }QNode,*QueuPtr; 5 typedef struct{ 6 Queuptr front;//队头指针 7 Queuptr rear;//队尾指针 8 }LinkQueue; 9 Status DestroyQueue(LinkQueue &Q){ 10 while(Q.front){//如果对头指针不为空,也就是说存在下一个节点 11 Q.rear=Q.front->next;//队尾指针指向下一个节点,保存下一节点的地址 12 free(Q.front);//删除此节点,释放其内存 13 Q.front=Q.rear;// 将保存在队尾指针的下一节点地址赋值给队头指针 14 } 15 return OK; 16 }