链表实现队列

#include<stdio.h>java

#include<stdlib.h>node

typedef int elementType;this

typedef struct q_node{指针

elementType data;code

q_node *next;队列

}Node;内存

typedef struct Link_Node{element

struct q_node *rear;

struct q_node *front;

} L_node;get

L_node* init(){it

L_node *p =(L_node *)malloc(sizeof(L_node));

if(p==NULL){

	printf("内存满了\n");
	
	return NULL;
} 
p->rear=p->front=NULL;

printf("初始化成功\n");

return p;

}

void push_queue(L_node *p,elementType x){

//新建个节点存储数据 

Node *temp =(Node *) malloc(sizeof(Node));

if(temp== NULL)
{
	printf("内存满了\n");
	
	return;
}

temp->data=x;

temp->next=NULL;


//判断下队列是否无元素 

if(p->rear==NULL){

	p->rear=temp;
	
	p->front=temp;
	
}
//若是非空,就把元素插入到队尾指针的后面 

p->rear->next=temp;

//要把队尾指针指向新建立的节点 

p->rear=temp;

printf("入队列成功\n");

}

void pop_queue(L_node * p){

Node * temp = p->front;

if(p->front==NULL){

	printf("队列已经空了\n");
	
	return;
}
//判断下若是队列只有一个元素 

if(p->front==p->rear){

	printf("%d\n",p->front->data);
	
	p->front=NULL;
	
	p->rear=NULL; 
	
	free(temp);
	
	return;
} 
printf("%d\n",p->front->data);

p->front=temp->next;

free(temp);

} int main(){

L_node *s=init();


for(int i=0;i<10;i++)

push_queue(s,i+1);

for(int i=0;i<11;i++)

pop_queue(s);

return 0;

}

java实现: public class Node_queue <T>{

T data;

private Node_queue<T> next;

public Node_queue(T data){

    this.data=data;
}

public Node_queue<T> getNext() {
    return next;
}

public void setNext(Node_queue<T> next) {
    this.next = next;
}

}

public class Link_queue<T> {

private Node_queue<T> rear;

private Node_queue<T> front;

private int size;

//初始化

public Link_queue(){

    size=0;
	
    rear=front=null;
}

//入队列

public void push_queue(T data){

    Node_queue temp =new Node_queue(data);
	
    if(isEmpty()){
	
        rear= front=temp;
		
    }else {
	
        rear.setNext(temp);
		
        rear=temp;
    }
	
    size++;
	
    System.out.println("入队列成功");
}

//出队列

public void pop_queue(){

    if(isEmpty())
	
        throw new RuntimeException("队列已经空了");
		
     Node_queue temp = front;
	 
    System.out.println(front.data);
	
     front=temp.getNext();
	 
     temp.setNext(null);
	 
      size--;
	  
      //删除最后一个节点时,front=null,可是rear不为空,须要将rear=null
	  
     if(size==0){
	 
         rear=null;
		 
     }


}
//判断非空否

public boolean isEmpty(){

    return  front==null?true:false;
}

public static void main(String[] args) {

    Link_queue queue = new Link_queue();
	
    boolean is=queue.isEmpty();
	
    System.out.println(is);
	
    for(int i=0;i<10;i++)
	
        queue.push_queue(i+1);
		
    for(int i=0;i<21;i++)
	
        queue.pop_queue();
}

}

相关文章
相关标签/搜索