鏈表實現隊列

#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();
}

}

相關文章
相關標籤/搜索