(체인 대기 열) 프로 그래 밍 실현 기능: 숫자 를 입력 할 때 데 이 터 를 정렬 하고 알파벳 을 입력 할 때 데 이 터 를 정렬 합 니 다.

21880 단어 데이터 구조
더 많은 자 료 는 클릭 하 십시오: 제 디 렉 터 리 본 편 은 자신 이 배 운 지식 과 응용 만 기록 하 는 데 사 용 됩 니 다. 코드 는 최적화 할 수 있 습 니 다. 참고 하 시기 바 랍 니 다. 잘못된 부분 이 발견 되면 저 에 게 메 시 지 를 남 겨 주 십시오. 감사합니다!
체인 헤더 파일:
//    :         
#ifndef LINKQUEUE_H
#define LINKQUEUE_H

#include 
#include 
#include 

#ifndef LINKQUEUE_NODE
#define LINKQUEUE_NODE int
#endif
//            ,   int
typedef LINKQUEUE_NODE datatype;

//       
struct node
{
	datatype data;
	struct node *next;
};

//           
typedef struct
{
	struct node *front;//  
	struct node *rear;//  
	int size;//    
}linkqueue;


//      
static linkqueue *init_queue()
{
	linkqueue *q = malloc(sizeof(linkqueue));

	if(q != NULL)
	{
		q->front = NULL;
		q->rear  = NULL;
		q->size  = 0;
	}
	return q;
}

//         
static bool empty(linkqueue *q)
{
	return q->size == 0;
}

//   (    )
static void en_queue(linkqueue *q, datatype data)
{
	struct node *new = malloc(sizeof(struct node));
	if(new != NULL)
	{
		new->next = NULL;
		new->data = data;
	}

	if(empty(q))//   
	{
		q->front = new;//          new
	}

	else//    
	{
		q->rear->next = new;//        new
	}	
	
	q->rear = new;//       new
	q->size++;//     +1
}

//   (     )
static struct node *out_queue(linkqueue *q)
{
	if(empty(q))//        
	{	
		return NULL;	
	}
	else if(q->size == 1)//        
	{
		q->rear = NULL;
	}
	else
	{
		struct node *p = q->front;//        
		q->front = q->front->next;//            (   )
		q->size--;//     -1

		p->next = NULL;//    NULL(     )
		return p;//         
	}
}

//      (   )
struct node *front(linkqueue *q)
{

	if(!empty(q))
	{
		return NULL;
	}
	
	else
	{
		return q->front;
	}
}


//           
static int size(linkqueue *q)
{
	return q->size;
}


//     (       )
static void destroy(linkqueue *q)
{
	if(empty(q))
	{
		return;
	}
	struct node *p = q->front;//    p     
	while(p!=NULL)
	{
		struct node *next = p->next;//    next     p    
		free(p);//     P
		p = next;//   p  next(    )
	}
	q->front = NULL;//(    )
	q->rear  = NULL;
	q->size  = 0;
}


//   
static void travel(linkqueue *q, void (*handler)(datatype data))
{
	if(empty(q))
	{
		return;
	}

	struct node *p = q->front;//    p     
	while(p != NULL)
	{
		//       
		handler(p->data);

		//        (    )
		p = p->next;
	}
}

#endif

주 함수:
#include 
//#define LINKQUEUE_NODE char
#include "linkqueue.h"

void show(int data)
{
	printf("%d\t", data);
}

int main(int argc, char **argv)
{
	//         
	linkqueue *q = init_queue();
	printf("       
"
); // int n; while(1) { // if(scanf("%d", &n) == 1) { printf(" :"); // en_queue(q, n); } // else { // while(getchar()!='
'
); // struct node *tmp = out_queue(q); if(!tmp) printf("
"
); else printf(" :%d
"
,tmp->data); } travel(q, show);// } return 0; }

내 디 렉 터 리

좋은 웹페이지 즐겨찾기