代码实现
# include <stdio.h>
# include <stdlib.h>
# include <stdbool.h>
# define ElemType int
typedef struct LinkNode { ElemType data; struct LinkNode * next;
} LinkNode;
typedef struct { LinkNode * front, * rear;
} * LinkQueue;
void InitQueue ( LinkQueue * queue) { ( * queue) = ( LinkQueue) malloc ( sizeof ( LinkNode) ) ; ( * queue) -> front = NULL ; ( * queue) -> rear = NULL ;
}
bool QueueEmpty ( LinkQueue queue) { return queue-> front == NULL ;
}
bool EnQueue ( LinkQueue * queue, ElemType e) { LinkNode * newNode = ( LinkNode * ) malloc ( sizeof ( LinkNode) ) ; if ( newNode == NULL ) { return false; } newNode-> data = e; newNode-> next = NULL ; if ( QueueEmpty ( * queue) ) { ( * queue) -> front = newNode; ( * queue) -> rear = newNode; } else { ( * queue) -> rear-> next = newNode; ( * queue) -> rear = newNode; }
}
bool DeQueue ( LinkQueue * queue, ElemType * e) { if ( QueueEmpty ( * queue) ) return false; * e = ( * queue) -> front-> data; ( * queue) -> front = ( * queue) -> front-> next; return true;
}
bool GetHead ( LinkQueue queue, ElemType * e) { if ( QueueEmpty ( queue) ) return false; * e = ( * queue) . front-> data; return true;
} int main ( ) { LinkQueue queue; ElemType Elem; InitQueue ( & queue) ; EnQueue ( & queue, 1 ) ; EnQueue ( & queue, 2 ) ; EnQueue ( & queue, 3 ) ; EnQueue ( & queue, 4 ) ; GetHead ( queue, & Elem) ; printf ( "当前队头元素为:%d\n" , Elem) ; DeQueue ( & queue, & Elem) ; printf ( "出队的元素为:%d\n" , Elem) ; DeQueue ( & queue, & Elem) ; printf ( "出队的元素为:%d\n" , Elem) ; DeQueue ( & queue, & Elem) ; printf ( "出队的元素为:%d\n" , Elem) ; DeQueue ( & queue, & Elem) ; printf ( "出队的元素为:%d\n" , Elem) ; return 0 ;
}