【3 栈和队列】只有尾结点rear进行入队出队。

typedef int ElemType; 					//typedef结尾有;而#define结尾没有 

typedef struct QNode{					//QNode链队列结点定义 
	ElemType data;
	struct QNode *next;
}QNode;

typedef struct{							//LinkQueue链队列的结构由多个QNode结点组成 
	QNode *rear;
}LinkQueue; 							//typedef struct定义没有* 

Linklist EnQueue(LinkQueue &Q,ElemType x){		//入队,rear尾插,将新元素x插入 
	QNode *p=(QNode *)malloc(sizeof(QNode));
	p->data=x;
	p->next=Q.rear->next;
	Q.rear->next=p;
	Q.rear=p;
}

bool DeQueue(LinkQueue &Q,ElemType &x){			//出队,front头删,将元素x删除 
	if(Q.rear==Q.rear->next)					//队空,这里front=rear->next 
		return false;							//循环队列front指向头结点,rear下一个为头 
	LNode *p=Q.rear->next->next;				//新结点指向被删除结点 
	x=p->data;									//x保存结点信息 
	Q.rear->next->next=p->next;					
	if(Q.rear==p)								//仅一个结点,删除后队空,f=r 
		Q.rear=Q.rear->next;
	free(p);									//释放被删除结点 
	return true;
}

你可能感兴趣的:(3,栈和队列,数据结构,算法)