读书笔记--栈和队列

    栈是个顺序的空间结构,其主要原理是开辟一个初始的、连续的空间以供节点的插入,栈节点之间并没有逻辑上的关联,也就是说,上一个节点并没有存储下一个节点的地址,也就是指针。所以栈的清空可以直接将头指针指向尾指针所指向的,下一个节点插入将覆盖掉原来的数据。简而言之,删除一个节点是将该节点从栈中删除,而并没有删除这个节点的数据。而队列不同,队列节点与节点之间有逻辑上的关联,上一个节点的指针域存储下一个节点的地址,而他们之间的访问则要遍历整个队列。所以清空队列需要依次清空,而不能直接在头指针和尾指针进行操作。

 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 } 

 

posted @ 2017-04-20 19:54  岁月难言  阅读(239)  评论(0编辑  收藏  举报