zoukankan      html  css  js  c++  java
  • 链队列及其操作

    问题: 跟之前想的不一样,以为就是个链表,结果实现时就出问题了。

         lqueue->rear要不断的后移***因此,每次入队的时候要找到lqueue->rear,因此每次入队是要后移lqueue->rear。^^

    代码:

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    typedef struct LinkQueue
    {
    	int data;
    	struct LinkQueue *front;
    	struct LinkQueue *rear;
    }*LQueue;
    
    void initLQueue(LQueue &lqueue)
    {
    	lqueue=(LQueue)malloc(sizeof(struct LinkQueue));
    	if(!lqueue)
    	{
    		cout<<"allocate fail"<<endl;
    		exit(-1);
    	}
    	else
    	{
    		lqueue->front=lqueue->rear=NULL;
    	}
    
    }
    
    void enQueue(LQueue lqueue,int elem)      //入队
    {
    	LQueue node,temp;
    
    	node=(LQueue)malloc(sizeof(struct LinkQueue));
    	if(!node)
    	{
    		cout<<"allocate fail"<<endl;
    		exit(-1);
    	}
    	else
    	{
    		node->data=elem;
    		node->front=node->rear=NULL;
    		if(lqueue->front==NULL)
    		{
    			temp=lqueue;
    			temp->front=node;
    			temp->rear=node;
    		}
    		else
    		{
    			temp=lqueue->rear;
    			temp->rear=node;
    			lqueue->rear=node;
    		}
    	}
    }
    
    int deQueue(LQueue lqueue)
    {
    	LQueue p;
    	int elem;
    	if(lqueue->front!=NULL)
    	{
    		if(lqueue->front->rear!=NULL)
    		{
    		p=lqueue->front;
    		lqueue->front=p->rear;
    	    elem=p->data;
    		free(p);
    		}
    		else
    		{
    			p=lqueue->front;
    			elem=p->data;
    			lqueue->front=lqueue->rear=NULL;
    			free(p);
    		}
    		return elem;
    	}
    	return 0;
    }
    
    int GetHead(LQueue lqueue)
    {
    	int elem;
    	if(lqueue->front!=NULL)
    	{
    		elem=lqueue->front->data;
    		return elem;
    	}
    	return 0;
    }
    int main()
    {
    	LQueue lqueue;
    	int arr[]={9,3,21,11,70,13,8,2,6};
    	initLQueue(lqueue);
        
    	for(int i=0;i<9;i++)
    	{
    		enQueue(lqueue,arr[i]);
    	}
    
    	cout<<"队头元素是 "<<GetHead(lqueue)<<endl;
    	while(lqueue->front!=NULL)
    	  {
    		cout<<deQueue(lqueue)<<" | ";
    	  }
    	cout<<endl;
    	return 0;
    }
    

      

    运行结果:

  • 相关阅读:
    C# DataGridView 与 datatable 之间数据传递
    C# 调用命令行命令 net use
    C# 链接 sql server 数据库字符串
    winform窗口关闭,进程没有关掉的解决办法
    select 中的逻辑判断 sql server
    C#中的abstract 类和方法!!!
    c# ComboBox绑定枚举
    C#与C++类型互转
    DllImport
    TCP三次握手四次挥手详解
  • 原文地址:https://www.cnblogs.com/xshang/p/3035615.html
Copyright © 2011-2022 走看看