標籤:
/* 隊列的鏈式儲存 *//* with header *//* with no typedef */struct Node{ ElementType Ele; struct Node *Next;};struct LinQ{ struct Node *rear; struct Node *front;};struct LinQ *CreateQ( void ){ struct LinQ *Ptr; struct Node *header; Ptr = malloc(sizeof(struct LinQ)); if(Ptr == NULL ) Error("out of space "); header = malloc( sizeof( struct Node ) ); if(header == NULL ) error("out of space "); header->Next = NULL; Ptr->front = Ptr->rear = header;}voidAddQ( struct LinQ *PtrQ, ElementType X ){ struct Node *Ptr; Ptr = malloc(sizeof(struct Node )); if(Ptr == NULL) Error("out of space "); Ptr->Ele = X; Ptr->Next = NULL; PtrQ->rear->Next = Ptr; PtrQ->rear = Ptr; }intIsEmpty( struct LinQ * PtrQ ){ return PtrQ->front->Next == NULL;}ElementTypeDeleteQ( struct LinQ * PtrQ ){ struct Node * TmpCell; if( IsEmpty( PtrQ ) ) Error("empty Queue"); Tmpcell = PtrQ->front->Next; PtrQ->front->Next = TmpCell->Next; free( TmpCell );}View Code
CreateQ旨在創造一個front和rear都指向頭結點header的LinQ結構
頭結點處Next設為NULL,在判斷是否空隊時可用
front一直指到頭結點
新增結點的Next一定改為NULL
結論:可以用typedef的地方就用,可以用頭結點的地方就用
隊列的鏈式儲存---鏈表實現(有頭結點)