七.队列链式结构的实现程序

#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"); 
       }
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值