用c++编写的数据结构链式队列
2010-04-05 11:16
381 查看
已经运行过了
#include<malloc.h> //头文件
#include<iostream.h>
#include<stdio.h>
#define DATATYPE1 int
typedef struct qnode
{
DATATYPE1 data;
struct qnode *next;
}LINKQLIST;
typedef struct
{
LINKQLIST *front,*rear;
}LINKQUEUE;
//链队列初始化
void initlinkqueue(LINKQUEUE *q)
{
q->front=(LINKQLIST *)malloc(sizeof(LINKQLIST));
(q->front)->next=NULL;
q->rear=q->front;
}
//判链队列空
int emptylinkqueue(LINKQUEUE *q)
{
int v;
if(q->front==q->rear)
v=1;
else
v=0;
return v;
}
//读链队列队首元素
DATATYPE1 getlinkfront(LINKQUEUE *q,DATATYPE1 v)
{
if(emptylinkqueue(q))
{
cout<<"队列为空!"<<endl;
v=NULL;
}
else
v=(q->front)->next->data;
return v;
}
//元素插入链队列
int enlinkqueue(LINKQUEUE *q,DATATYPE1 x)
{
(q->rear)->next=(LINKQLIST *)malloc(sizeof(LINKQLIST));
q->rear=(q->rear)->next;
(q->rear)->data=x;
(q->rear)->next=NULL;
return x;
}
//从链队列中删除元素
DATATYPE1 dellinkqueue(LINKQUEUE *q)
{
LINKQLIST *p;
DATATYPE1 v;
if(emptylinkqueue(q))
{printf("队列为空./n");
v=NULL;}
else
{p=(q->front)->next;
(q->front)->next=p->next;
if(p->next==NULL)
q->rear=q->front;
v=p->data;
free(p);}
return v;
}
//主函数
void main()
{
int i,x;
LINKQUEUE *q=(LINKQUEUE *)malloc(sizeof(LINKQUEUE));
initlinkqueue(q);
cout<<"请选择:1.读链队列队首元素 2.元素插入链队列 3.从链队列中删除元素 0.退出"<<endl;
cin>>i;
while(i!=0)
{
if(i==1)
{
x=getlinkfront(q,x);
if(x==0)
cout<<"读链队列队首元素失败!"<<endl;
else
cout<<"读链队列队首元素成功!其值为:"<<x<<endl;
}
else if(i==2)
{
cout<<"请输入要插入的数:"<<endl;
cin>>x;
x=enlinkqueue(q,x);
if(enlinkqueue(q,x))
cout<<"插入成功!其值为:"<<x<<endl;
else
cout<<"插入失败!"<<endl;
}
else if(i==3)
{
if(dellinkqueue(q))
cout<<"从链队列中删除元素成功!"<<endl;
else
cout<<"从链队列中删除元素失败!"<<endl;
}
cout<<"请选择:1.读链队列队首元素 2.元素插入链队列 3.从链队列中删除元素 0.退出"<<endl;
cin>>i;
}
}
#include<malloc.h> //头文件
#include<iostream.h>
#include<stdio.h>
#define DATATYPE1 int
typedef struct qnode
{
DATATYPE1 data;
struct qnode *next;
}LINKQLIST;
typedef struct
{
LINKQLIST *front,*rear;
}LINKQUEUE;
//链队列初始化
void initlinkqueue(LINKQUEUE *q)
{
q->front=(LINKQLIST *)malloc(sizeof(LINKQLIST));
(q->front)->next=NULL;
q->rear=q->front;
}
//判链队列空
int emptylinkqueue(LINKQUEUE *q)
{
int v;
if(q->front==q->rear)
v=1;
else
v=0;
return v;
}
//读链队列队首元素
DATATYPE1 getlinkfront(LINKQUEUE *q,DATATYPE1 v)
{
if(emptylinkqueue(q))
{
cout<<"队列为空!"<<endl;
v=NULL;
}
else
v=(q->front)->next->data;
return v;
}
//元素插入链队列
int enlinkqueue(LINKQUEUE *q,DATATYPE1 x)
{
(q->rear)->next=(LINKQLIST *)malloc(sizeof(LINKQLIST));
q->rear=(q->rear)->next;
(q->rear)->data=x;
(q->rear)->next=NULL;
return x;
}
//从链队列中删除元素
DATATYPE1 dellinkqueue(LINKQUEUE *q)
{
LINKQLIST *p;
DATATYPE1 v;
if(emptylinkqueue(q))
{printf("队列为空./n");
v=NULL;}
else
{p=(q->front)->next;
(q->front)->next=p->next;
if(p->next==NULL)
q->rear=q->front;
v=p->data;
free(p);}
return v;
}
//主函数
void main()
{
int i,x;
LINKQUEUE *q=(LINKQUEUE *)malloc(sizeof(LINKQUEUE));
initlinkqueue(q);
cout<<"请选择:1.读链队列队首元素 2.元素插入链队列 3.从链队列中删除元素 0.退出"<<endl;
cin>>i;
while(i!=0)
{
if(i==1)
{
x=getlinkfront(q,x);
if(x==0)
cout<<"读链队列队首元素失败!"<<endl;
else
cout<<"读链队列队首元素成功!其值为:"<<x<<endl;
}
else if(i==2)
{
cout<<"请输入要插入的数:"<<endl;
cin>>x;
x=enlinkqueue(q,x);
if(enlinkqueue(q,x))
cout<<"插入成功!其值为:"<<x<<endl;
else
cout<<"插入失败!"<<endl;
}
else if(i==3)
{
if(dellinkqueue(q))
cout<<"从链队列中删除元素成功!"<<endl;
else
cout<<"从链队列中删除元素失败!"<<endl;
}
cout<<"请选择:1.读链队列队首元素 2.元素插入链队列 3.从链队列中删除元素 0.退出"<<endl;
cin>>i;
}
}
相关文章推荐
- C++编写利用数据结构中队列(Queue)打印出用户所指定长度的杨辉三角
- 用c++编写的数据结构循环队列
- 数据结构队列C++实现 链式和循环
- c++实现数据结构八 链式队列
- 【数据结构】用C++编写队列及基本操作(包括插入,出队列,摧毁,清空等等)
- 数据结构之C++实现链式队列(LinkQueue)(无主函数)
- c++ 数据结构 链式队列
- C++——数据结构之 顺序队列 链式队列?
- 数据结构学习之队列的链式存储的C++实现
- 数据结构队列C++实现 链式和循环
- 几种简单的数据结构的C++实现,树,图,链表,环形队列,栈等---环形队列篇
- 数据结构之队列的链式表示和实现
- 3-7-队列的链式存储-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- 面向数据c++数据结构之基本数据结构(队列)--【美】Jan Harrington 陈博译
- 数据结构c++实现----双端队列
- 【学习点滴-数据结构-栈&队列】 链式队列的实现及应用
- 【数据结构】链式队列的基本操作
- 【c++版数据结构】之循环队列的实现
- 数据结构--顺序循环队列和链式队列
- 【数据结构】用两个栈实现一个队列(链式)