数据结构与算法(队列部分)学习总结

半拉子学习总结

Posted by Zexin Zhang on October 7, 2017

队列

本章知识结构图

队列知识结构图

顺序队列的结构类型

#define maxlen 100
typedef struct{
	Datatype data[maxlen];
	int front;
	int rear;
}SeQueue;

循环队列置空队算法

SeQueue *InitSeQueue(SeQueue *Q){
	Q->front=0;
	Q->rear=0;
	return Q;
}

建空循环队列

SeQueue *SetQueue(){
	SeQueue *Q;
	Q=(SeQueue *)malloc(sizeofSeQueue);
	Q->front=0;
	Q->rear=0;
	return Q;
}

循环队列判队满

int QueueFull(SeQueue *Q){
	if(Q->front==(Q->rear+1)%maxlen)
	return 1;
	else
	return 0;
}

循环队列判队空

int QueueEmpty(SeQueue *Q){
	if(Q->front==Q->rear)
	return 1;
	else 
	return 0;
}

循环队列入队

void Add(SeQueue *Q,Datatype x){
	if(!QueueFull(Q)){
		Q->rear=(Q->rear+1)%maxlen;
		Q->data[Q->rear]=x;
	}
	else 
	printf("queue full");	
}

循环队列出队

void Delete (SeQueue *Q){
	if(!QueueEmpty)
		Q->front=(Q->front+1)%maxlen;
	else
	    printf("queue empty");
}

链队列结构类型

typedef struct node{
	datatype data;
	struct node *next;
}LinkList;
typedef struct{
	LinkList *front;
	LinkList *rear;
}LinkQueue;
LinkQueue *Q;

链队列建空队

LinkQueue *SetQueue(){
	LinkQueue *Q;
	Q=(LinkQueue *)malloc(sizeof(LinkQueue));
	Q->front=NULL;
	Q->rear=NULL;
	return Q;
}

链队列判队空

int QueueEmpty(LinkQueue *Q){
	if(Q->front==null)
	return 1;
	else 
	return 0;
}

链队列入队

LinkQueue *Add(LinkQueue *Q,Datatype x){
	LinkList *p;
	p=(LinkQueue *)malloc(sizeof(LinkList));
	p->data=x;
	p->next=NULL;
	if(Q->front==NULL)
	 Q->front=p;
	else 
	 Q->rear->next=p;
	 Q->rear=p;
	return Q;
}

链队列出队

LinkQueue *Delete(LinkQueue *Q){
	LinkList *p;
	if(!QueueEmpty(Q)){
		p=Q->front;
		Q->front=p->next;
	  if(p->next=NULL)
	    Q->rear=Q->front;
	free(p);
	return Q;
	}
	else 
	printf("queue empty");
}

链队列置空队

LinkQueue *InitStack(LinkQueue *LS){
	while(Q->front!=NULL)
	Q=Delete(Q);
	return (Q);
}

打印杨辉三角

void yanghui(int n)  //打印n行
{
	int s=0,t,j;
	Queue *Q;
	Init(Q);
	cout<<1<<endl;
	Add(Q,1);
	for(int i=2;i<=n;i++){
		Add(Q,0);
		for(j=i;j<=i;j++){
			t=Delete(Q);
			cout<<s+t;
			Add(Q,s+t);
			s=t;
		}
		cout<<endl;
	}
}