请任选一种存储方式表示队列,用C++语言编程实现队列的以下基本 *** 作:

请任选一种存储方式表示队列,用C++语言编程实现队列的以下基本 *** 作:,第1张

说明:

//用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--

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12539058.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存