#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;
else
x=((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");
}
}
七.队列链式结构的实现程序
最新推荐文章于 2021-08-18 19:51:45 发布