七.队列链式结构的实现程序
来源:互联网 发布:我的世界开挂js 编辑:程序博客网 时间:2024/05/20 17:24
#include "stdio.h"#include "iostream.h"#include <windows.h>typedef int elementType; //elementType 定义为整数类型//定义链队节点typedef struct LNode{elementType data;struct LNode *next;} node; //定义链队指针结构typedef struct {node* front;node* rear;}linkQueue;//--1.链队初始化------------------------------------------------void initQueue(linkQueue &q){q.front=new node; //产生头结点,指针为front;q.rear=q.front;q.front->next=NULL;}//--2.判断队空--------------------------------------------------bool queueEmpty(linkQueue &q){return (q.front==q.rear);}//--3.取队头元素------------------------------------------------void queueFront(linkQueue &q, elementType &x){if(queueEmpty(q))cout<<"空队列,无法取队头元素!"<<endl;elsex=((q.front)->next)->data;}//--4.入队-------------------------------------------------------void enQueue(linkQueue &q, elementType x){node* P=new node; //申请内存,产生新节点P->data=x;P->next=NULL;q.rear->next=P;q.rear=P; //尾指针指向新的节点(新队尾)}//--5.出队-------------------------------------------------------void outQueue(linkQueue &q, elementType &x){node* u; //用以指向删除节点if(queueEmpty(q))cout<<"当前队空,无法执行出队操作!"<<endl;else{x=q.front->next->data; //取出队头元素u=q.front->next; //u指向队头q.front->next=u->next;delete u; //删除原队头,释放内存if(q.front->next==NULL) //删除最后一个节点,成为空队列q.rear=q.front;}}//--6.销毁队列,释放内存void destroyQueue(linkQueue &q){node *P,*pTemp;P=q.front;while(P){pTemp=P->next;delete(P);P=pTemp;}q.front=NULL;q.rear=NULL;}链式队列的初始化链式队列的初始化,入队列#include <conio.h>#include <stdio.h> #include <stdlib.h> enum BOOL{False,True}; typedef struct QNode //定义节点结构 { char data; //数据域 struct QNode *next; //后向指针 }QNode,*QueuePtr; typedef struct linkqueue{ //定义队列结构 QueuePtr front; //队首指针 QueuePtr rear; //队尾指针 }LinkQueue; void initial(LinkQueue &); //初始化一个队列 BOOL En_LinkQueue(LinkQueue &,char); //将一个元素入队列 BOOL De_LinkQueue(LinkQueue &,char &); //将一个元素出队列 void Print_LinkQueue(LinkQueue);//显示队列中所有元素 void main() { LinkQueue ls; char ch,j; int flag=1; BOOL temp; //---------------------程序解说----------------------- printf("本程序实现链式结构的队列的操作。\n"); printf("可以进行入队列出队列等操作。\n"); //---------------------------------------------------- initial(ls); //初始化队列 while(flag) { printf("请选择:\n"); printf("1.显示队列所有元素\n"); printf("2.入队列\n"); printf("3.出队列\n"); printf("4.退出程序\n"); scanf(" %c",&j); switch(j) { case '1':Print_LinkQueue(ls); //显示队列中所有元素 break; case '2':printf("请输入要人队的元素(一个字符):"); scanf(" %c",&ch); //输入要入队列的字符 En_LinkQueue(ls,ch);//入队列 Print_LinkQueue(ls); break; case '3':temp=De_LinkQueue(ls,ch); //出队列 if(temp!=False) { printf("出队一个元素:%c\n",ch);//若队列不空显示出队列的元素 Print_LinkQueue(ls); } else printf("队列为空!\n");//否则队列为空 break; default: flag=0;printf("程序运行结束按任意键退出!\n"); } } getch(); } void initial(LinkQueue &Q) {//队列初始化 Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); //生成一个头结点并把首尾指针指向头结点 Q.front->next=NULL; } BOOL En_LinkQueue(LinkQueue &Q,char ch) {//入队列成功返回True失败返回False QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode));//生成一个新节点 p->data=ch; //赋值 p->next=NULL; Q.rear->next=p; //插入至队列尾 Q.rear=p; //修改队尾指针 return True; } BOOL De_LinkQueue(LinkQueue &Q,char &ch) {//出队列,成功返回True并用ch返回该元素值失败返回False QueuePtr p; if(Q.front==Q.rear) return False; //判断队列是否已空已空返回False p=Q.front->next; //p指向队列中第一个元素 ch=p->data; //取得该元素值 Q.front->next=p->next; //修改队首指针 if(Q.rear==p) Q.rear=Q.front;//若队列已空把队尾指针指向头结点 return True; //成功出队列返回True } void Print_LinkQueue(LinkQueue Q) {//显示队列中所有元素 QueuePtr p; p=Q.front->next; if(p==NULL) printf("队列为空!\n");//队列为空 else { while(p!=NULL) //否则显示队列中所有元素 { printf("%c ",p->data); p=p->next; } printf("\n"); }}