• 链式队列(附带测试代码)


    #include
    using namespace std;
    template
    struct LinkNode

        T data;
        LinkNode* link;
        LinkNode(T x,LinkNode*p=NULL)
        {
            data=x;
            link=p;
        }
    };
    template
    class LinkedQueue
    {
        public:
            LinkedQueue();//构造函数初始化 
            ~LinkedQueue();//析构函数置空 
            bool EnQueue(const  T&x);
        //插入函数 
            bool DeQueue(T&x);//从队头出 
            bool getFront(T&x)const;//得到队头元素 
            void makeEmpty();//置空函数 
            bool IsEmpty()const{
            return (front==NULL)?true:false;}//判断是否为空 
            int getSize()const;//得到队列长度
            void output(ostream&out);//输出队列元素 
            private:
                LinkNode*front,*rear;//尾指针和头指针 
     };
     template
    LinkedQueue::LinkedQueue() {
        //构造函数,初始化队头和队尾指针
        front = rear = NULL;
    }
     template
     void LinkedQueue::makeEmpty() //置空函数 
     {
         LinkNode*p;//工作指针 
         while(front!=NULL)//从队头删元素,首先要判断前提条件 
         {
             p=front;//保存 
             front=front->link;//移动 
             delete p;//删除 
         }
     }
     template
     bool LinkedQueue::EnQueue(const T&x)//队尾插入元素 
     {
         if(NULL==front){//前提条件判断,观察是否有空间 
             front=rear=new LinkNode(x);//开辟空间 
             if(NULL==front) //双重保障,判断是否成功开辟空间 
                 {
                 return false;}}
         else{

             rear->link=new LinkNode(x);//从队尾插入 
             if(NULL==rear->link)
             return false;//再次判断是否成功开辟空间给x
             rear=rear->link; }//更新尾指针 
         
         return true;
     }
     template
     bool LinkedQueue::DeQueue(T&x) //从队头删元素 
     {
         if(IsEmpty())//前提条件判断,是否有元素 
         return false;
         LinkNode*p=front;//保存 
         x=front->data;
         front=front->link;//移动 
         delete p;//删除 
         return true;
     }
     template
     bool LinkedQueue::getFront(T&x)const{//返回队头元素 
    if(IsEmpty())//前提条件判断
    {
        cout<<"无法输出队头元素,队列为空!"<     return false;
        
    }
      else
      x=front->data;//获取队头元素值 
      cout<<"队头元素为"< return true;

    }
    template
    int LinkedQueue::getSize()const//获取元素个数 
    {
        LinkNode*p=front;//建立工作指针 
        int k=0;//计数变量 
        while(p!=NULL)//判断条件 
        {
        
            k++;//计数 
                p=p->link;//移动 
        }
        cout<<"当前队列的长度为"<     return k;
    }
    template
    LinkedQueue::~LinkedQueue() {
        //析构函数,释放程序中的资源
        makeEmpty();
    }
    template
    void LinkedQueue::output(ostream&out) 
    {
        LinkNode *current=front;
        while(current!=NULL) 
        {
            out<data<<"  ";
            current=current->link;//移动 
        }
        cout< }
    template
    ostream&operator<<(ostream&out,LinkedQueue&Q)
    {
        
       Q.output(out);
        return out;
    }
    int main()
    {

       cout<<"------------------链式队列--------------------"<     LinkedQueue link_Q;
        bool end=false;
        int choice;
        while(!end)
        {
            cout<<"1:建立链式队列"<         cout<<"2:获取队列长度"<         cout<<"3:判断队列是否为空" <         cout<<"4:将队列置空"<         cout<<"5:在队尾插入元素"<         cout<<"6:获取队头元素"<         cout<<"7:删除队头元素"<         cout<<"8:输出队列元素"<         cout<<"9:退出" <         cout<<"请输入要进行的操作1~9"; 
            cin>>choice;
            switch(choice)
            {
                case 1:
                    cout<<"请输入链式队列的元素个数";
                int n;
                cin>>n;
                cout<<"请依次输入元素值"<             int a[1000];//可修改 
                for(int i=0;i             {
                    cin>>a[i];
                    link_Q.EnQueue(a[i]);
                }
                cout<<"当前队列元素为" <             cout<             break;
                case 2:
                link_Q.getSize();
                    break;
                    case 3:
                        if(link_Q.IsEmpty())
                        cout<<"链式队列为空!"<                     else
                        cout<<"链是队列不为空!" <                     break;
                        case 4:
                        link_Q.makeEmpty();
                        cout<<"已置空!"<                     break;
                        case 5:
                            cout<<"请输入插入的元素"<                         int val;
                            cin>>val;
                            link_Q.EnQueue(val);
                            break;
                                case 6:
                                link_Q.getFront(n);

                                break;
                                case 7:
                                    link_Q.DeQueue(n);
                                    cout<<"删除的队头元素为"<                                 break;
                                    case 8 :
                                        cout<<"当前队列元素为"<                                 cout<                                     break;
                                        case 9:
                                            end=true;
                                            break;
                                            default:
                                                cout<<"输入错误!  请重新输入!!!"<         }
            cout<      
    }
        return 0;

    }

  • 相关阅读:
    基于免费敏捷工具Leangoo领歌的Scrum敏捷管理实践
    Fiddler的安装和使用
    HDLbits: Lfsr5
    基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的零售柜商品检测软件(Python+PySide6界面+训练代码)
    java通过socket实现https get 请求网页
    网课答案公众号搭建过程详解
    Vue——element-UI框架、JSON Web Tokens、样式穿透
    带你徒手完成基于MindSpore的CycleGAN实现
    java毕业生设计在线教育平台计算机源码+系统+mysql+调试部署+lw
    MFC自定义消息的实现方法----(线程向主对话框发送消息)、MFC不能用UpdateData的解决方法
  • 原文地址:https://blog.csdn.net/weixin_62802660/article/details/127414957