
//用rear指针在队尾插入元素,用front 指针在队头删除元素。
//用了不带头结点的链表
有些函数名对应你需要的 *** 作如下:
InitQueue( )----------------linkqueue()//构造函数,建立空队列
DestroyQueue( )-----------------~linkqueue()//析构函数
ClearQueue( ):将队列清空-------------int DeQueue()void clear()
QueueEmpty( )-------------------------int IsEmpty()const
QueueLength( )----------------------int Length( )
GetHead( )同名
QueueTraverse( )-----------show();
要求都达到了哈,要加分的哦 ^-^
注:
我是在MinGW下运行成功的,如果你用其他编译器,要适当调整。
在MinGW下0error,0warnings。
加分哦
在linkqueue.h中:
#ifndef linkqueue_H
#define linkqueue_H
//用rear指针在队尾插入元素,用front 指针在队头删除元素。
//用了不带头结点的链表
#include<iostream>
using namespace std
template<typename type>class linkqueue
template<typename type>class node //链式核唤队列结点类定义
{
friend class linkqueue<type>
private:
type data
node<type>*next
public:
node(type da, node<type>*ne = NULL) //构造函数
{
data = da next = ne
}
}
template<typename type>class linkqueue //链式队列的类定义
{
private:
node<type>* front, *rear//队头,队尾指针
//front 指针指向队列的第一个元素
//rear 指针指队列的最后一个元素
public:
linkqueue()//构造函数,建立空队列
{
rear = NULL front = NULL
}
~linkqueue()
void EnQueue(const type &item) //将item 加入队列中
int DeQueue()//若队列非空,则删除队头元素,并返谨弯回1,否则返回 0
void clear() //与~linkqueue()相同
int IsEmpty()const
{
return front==NULL //若队列空,则队首指针指向空。
}
type GetHead()//读取队列头元素
int Length()
void show()
}
template<typename type>linkqueue<type>::~linkqueue() //析构这个队列,逐个祥氏闷删除队列中的结点
{
node<type>*p = front
while(front!=NULL)
{
p = front
front=front->next
delete p
}
}
template<typename type>void linkqueue<type>::EnQueue(const type &item)
//将新元素item插入到队列的队尾
{
if(front==NULL) //空队,新结点既是队头又是队尾
{
front = rear = new node<type>(item)
return
}
node<type>*p = new node<type>(item)
rear->next = p
rear = rear->next
}
template<typename type>int linkqueue<type>::DeQueue()
//删除队头结点,并返回1,否则返回0
{
if(IsEmpty())return 0 //空队列返回0
node<type>*p = front
front = front->next
delete p
return 1
}
template<typename type>type linkqueue<type>::GetHead()
{
if(IsEmpty())
{
cout<<"队列为空,返回"<<endl
exit(-1)
}
type p = front->data
return p
}
template<typename type>int linkqueue<type>::Length()
{
node<type>*p = front
if(p==NULL)
{
cout<<"队列为空 "<<endl
exit(-1)
}
int i=0
while(p!=NULL)
{
i++
p = p->next
}
return i
}
template<typename type>void linkqueue<type>::show()
{
node<type>*p = front
if(p==NULL)
{
cout<<"队列为空 "<<endl
exit(-1)
}
cout<<"输出队列"<<endl
cout<<p->data
p=p->next
while(p!=NULL)
{
cout<<", "<<p->data
p = p->next
}
cout<<endl
}
#endif
在linkqueue.cpp中
#include<iostream>
#include"linkqueue.h"
using namespace std
int main() //简单的测试
{
linkqueue<int>A
for(int i=0i<20i++)
A.EnQueue(i)
A.show()
for(int i=0i<5i++)
A.DeQueue()
A.show()
int a = A.GetHead()
cout<<a<<endl
int len = A.Length()
cout<<len<<endl
return 0
}
这样的话应该符合你的要求:
#include<stdio.h>void add(int queue[],int x)
int Top(int queue[])
void del(int queue[])
int end=0
int main()
{
int n
scanf("%d",&n)//将要入队列n个元素
int queue[1000]
for(int i=1i<=ni++)//输入n个元素
{
add(queue,i)//将i加入队列
}
//验证加入队列的元素,将队列中的元素按照输入的顺序输出:
for( i=1i<=ni++)
{
printf("%d ",Top(queue))//Top函数返回队头元素
del(queue)//删手碧除队头元素
}
//验证输出已经出队列后的队列(数组)元素:
printf("\n")
for(i=1i<=ni++)
printf("%d ",queue[i])
printf("\n")
毕伏举return 0
}
void add(int queue[],int x)
{
queue[++end]=x
}
int Top(int queue[])
{
return queue[1]//注意,这里的函数始终return queue[1]这里是和将普通数组中厅轮的元素输出最大的不同之处。!!!!!!
}
void del(int queue[])
{
for(int i=2i<=endi++)
{
queue[i-1]=queue[i]
}
queue[end]=0//将删除后的地方置0
end--
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)