대기 열 - 링크 구현

2495 단어 대열
머리말:
   
       대기 열 과 스 택 의 차 이 는 대기 열 이 먼저 나 온 데이터 구조 입 니 다.출입 대기 열 을 쉽게 하기 위해 서 는 대기 열 헤드 포인터 와 대기 열 꼬리 지침 을 도입 할 수 있 습 니 다.
분석 설명:
       대열 의 결점 구조.
typedef int QElemType;
typedef struct QNode{
	QElemType	data;
	struct QNode *next;
}QNode, *QueuePtr;

typedef struct{
	QueuePtr	front;//      
	QueuePtr	rear;//      
}LinkQueue;
LinkQueue Q;

       
대기 열의 초기 화.
LinkQueue  InitQueue(LinkQueue *Q)
{
	QueuePtr  tmp;
	tmp = (QueuePtr)malloc(sizeof(QNode));
	if(tmp == NULL){
		printf("create queue error.
"); return ; } Q->front = tmp; Q->rear = Q->front; Q->front->next = NULL; return *Q; }

         
대기 열 에 들 어가 조작 하 다.
void EnQueue(LinkQueue *Q, QElemType e)
{
	QueuePtr	tmp;
	tmp = (QueuePtr)malloc(sizeof(QNode));
	if(tmp == NULL){
		printf("create queue error.
"); return ; } tmp->data = e; tmp->next = NULL; Q->rear->next = tmp; Q->rear = tmp; return; }

       
대기 열 조작.
void DeQueue(LinkQueue *Q, QElemType *e)
{
	QueuePtr tmp;
	if(Q->front == Q->rear){
		printf("the queue is empty.
"); return ; } tmp = Q->front->next; *e = tmp->data; Q->front->next = tmp->next; if(Q->rear == tmp) Q->rear = Q->front; free(tmp); return; }

       
대기 열의 헤드 요 소 를 가 져 옵 니 다.
void GetHead(LinkQueue *Q, QElemType *e)
{
	if(Q->front == Q->rear)
		return;
	*e = Q->front->next->data;
	return ;
}

         
대기 열 이 비어 있 는 지 판단 합 니 다.
int QueueEmpty(LinkQueue *Q)
{
	if(Q->front == Q->rear)
		return TRUE;
	return FALSE;
}

         
대열 을 비우 다.
void ClearQueue(LinkQueue *Q)
{
	if(Q->front == Q->rear){
		printf("the queue is empty.
"); return; } while(Q->front->next){ Q->rear = Q->front->next->next; free(Q->front->next); Q->front = Q->front->next; } Q->front->next = NULL; Q->rear = Q->front; return; }

         
대열 의 길 이 를 구하 다.
int QueueLength(LinkQueue Q)
{
	int length = 0;
	LinkQueue Tmp= Q;

	while(Tmp.front != Tmp.rear){
		length++;
		Tmp.front = Tmp.front->next;	
	}

	return length - 1;
}

좋은 웹페이지 즐겨찾기