頭文件:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int elemType;
typedef struct Queue_Node
{//結點結構
elemType value;
struct Queue_Node *next;
}Queue_Node,*ptr_Queue_Node;
typedef struct Queue_List
{//鏈表結構
ptr_Queue_Node front;
ptr_Queue_Node rear;
}Queue_List,*ptr_Queue_List;
ptr_Queue_List Init_QueueList(void)
{//初始化一個空的鏈隊列(帶頭結點)
ptr_Queue_List queuelist;
queuelist=new Queue_List;
queuelist->front=new Queue_Node;
queuelist->rear=queuelist->front;
queuelist->rear->next=NULL;
return queuelist;
}
bool Is_QueueList_Empty(ptr_Queue_List queuelist)
{//判斷隊列是否爲空
if(queuelist->front==queuelist->rear)
{
return true;
}
return false;
}
int QueueList_Length(ptr_Queue_List queuelist)
{//獲取隊列的長度
ptr_Queue_Node p;
int len=0;
p=queuelist->front;
while(p!=queuelist->rear)
{
p=p->next;
++len;
}
return len;
}
void Enter_QueueList(ptr_Queue_List queuelist,elemType elem)
{//入隊
ptr_Queue_Node p;
p=new Queue_Node;
p->value=elem;
if(Is_QueueList_Empty(queuelist))
{
queuelist->front->next=p;
queuelist->rear=p;
p->next=NULL;
}
else
{
queuelist->rear->next=p;
queuelist->rear=p;
p->next=NULL;
}
}
void Delete_QueueList(ptr_Queue_List queuelist,elemType *elem)
{//出隊
ptr_Queue_Node p;
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty,you can't delete head_element from it.\n");
}
else
{
if(QueueList_Length(queuelist)==1)
{//鏈隊列長度爲1
p=queuelist->front->next;
*elem=p->value;
free(p);
queuelist->rear=queuelist->front;
queuelist->rear->next=NULL;
}
else
{
p=queuelist->front->next;
*elem=p->value;
queuelist->front->next=p->next;
free(p);
}
}
}
bool Pre_Element(ptr_Queue_List queuelist,int pos,elemType *elem)
{
ptr_Queue_Node p=queuelist->front->next;
int i;
if(pos<1 || pos>QueueList_Length(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
if(pos==1)
{//隊首結點沒有前驅結點
printf("The head_node doesn't have a pre_node.\n");
return false;
}
else
{
for(i=1;i<pos-1;++i)
{
p=p->next;
}
*elem=p->value;
return true;
}
}
}
}
bool Next_Element(ptr_Queue_List queuelist,int pos,elemType *elem)
{
ptr_Queue_Node p=queuelist->front->next;
int i;
if(pos<1 || pos>QueueList_Length(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
if(pos==QueueList_Length(queuelist))
{//隊尾結點沒有後繼結點
printf("The rear_node doesn't have a next_node.\n");
return false;
}
else
{
for(i=1;i<pos;++i)
{//找到pos位置處的結點
p=p->next;
}
*elem=p->next->value;
return true;
}
}
}
}
bool Cur_Element(ptr_Queue_List queuelist,int pos,elemType *elem)
{
ptr_Queue_Node p=queuelist->front->next;
int i;
if(pos<1 || pos>QueueList_Length(queuelist))
{
printf("The position is invalidate.\n");
return false;
}
else
{
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
for(i=1;i<pos;++i)
{//找到pos位置處的結點
p=p->next;
}
*elem=p->value;
return true;
}
}
}
bool Head_Element(ptr_Queue_List queuelist,elemType *elem)
{//得到隊首元素
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
*elem=queuelist->front->next->value;
return true;
}
}
bool Rear_Element(ptr_Queue_List queuelist,elemType *elem)
{//得到隊尾元素
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
*elem=queuelist->rear->value;
return true;
}
}
void Destroy_QueueList(ptr_Queue_List queuelist)
{
ptr_Queue_Node p=queuelist->front->next;
ptr_Queue_Node q;
while(p!=queuelist->rear)
{//釋放鏈隊列中的結點
q=p->next;
free(p);
p=q;
}
free(queuelist->rear);//釋放隊尾結點
free(queuelist->front);//釋放隊首結點
}
void Visit_QueueList(ptr_Queue_List queuelist)
{
ptr_Queue_Node p=queuelist->front->next;
while(p)
{
printf("%4d",*p);
p=p->next;
}
printf("\n");
}
#include <stdlib.h>
#include <malloc.h>
typedef int elemType;
typedef struct Queue_Node
{//結點結構
elemType value;
struct Queue_Node *next;
}Queue_Node,*ptr_Queue_Node;
typedef struct Queue_List
{//鏈表結構
ptr_Queue_Node front;
ptr_Queue_Node rear;
}Queue_List,*ptr_Queue_List;
ptr_Queue_List Init_QueueList(void)
{//初始化一個空的鏈隊列(帶頭結點)
ptr_Queue_List queuelist;
queuelist=new Queue_List;
queuelist->front=new Queue_Node;
queuelist->rear=queuelist->front;
queuelist->rear->next=NULL;
return queuelist;
}
bool Is_QueueList_Empty(ptr_Queue_List queuelist)
{//判斷隊列是否爲空
if(queuelist->front==queuelist->rear)
{
return true;
}
return false;
}
int QueueList_Length(ptr_Queue_List queuelist)
{//獲取隊列的長度
ptr_Queue_Node p;
int len=0;
p=queuelist->front;
while(p!=queuelist->rear)
{
p=p->next;
++len;
}
return len;
}
void Enter_QueueList(ptr_Queue_List queuelist,elemType elem)
{//入隊
ptr_Queue_Node p;
p=new Queue_Node;
p->value=elem;
if(Is_QueueList_Empty(queuelist))
{
queuelist->front->next=p;
queuelist->rear=p;
p->next=NULL;
}
else
{
queuelist->rear->next=p;
queuelist->rear=p;
p->next=NULL;
}
}
void Delete_QueueList(ptr_Queue_List queuelist,elemType *elem)
{//出隊
ptr_Queue_Node p;
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty,you can't delete head_element from it.\n");
}
else
{
if(QueueList_Length(queuelist)==1)
{//鏈隊列長度爲1
p=queuelist->front->next;
*elem=p->value;
free(p);
queuelist->rear=queuelist->front;
queuelist->rear->next=NULL;
}
else
{
p=queuelist->front->next;
*elem=p->value;
queuelist->front->next=p->next;
free(p);
}
}
}
bool Pre_Element(ptr_Queue_List queuelist,int pos,elemType *elem)
{
ptr_Queue_Node p=queuelist->front->next;
int i;
if(pos<1 || pos>QueueList_Length(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
if(pos==1)
{//隊首結點沒有前驅結點
printf("The head_node doesn't have a pre_node.\n");
return false;
}
else
{
for(i=1;i<pos-1;++i)
{
p=p->next;
}
*elem=p->value;
return true;
}
}
}
}
bool Next_Element(ptr_Queue_List queuelist,int pos,elemType *elem)
{
ptr_Queue_Node p=queuelist->front->next;
int i;
if(pos<1 || pos>QueueList_Length(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
if(pos==QueueList_Length(queuelist))
{//隊尾結點沒有後繼結點
printf("The rear_node doesn't have a next_node.\n");
return false;
}
else
{
for(i=1;i<pos;++i)
{//找到pos位置處的結點
p=p->next;
}
*elem=p->next->value;
return true;
}
}
}
}
bool Cur_Element(ptr_Queue_List queuelist,int pos,elemType *elem)
{
ptr_Queue_Node p=queuelist->front->next;
int i;
if(pos<1 || pos>QueueList_Length(queuelist))
{
printf("The position is invalidate.\n");
return false;
}
else
{
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
for(i=1;i<pos;++i)
{//找到pos位置處的結點
p=p->next;
}
*elem=p->value;
return true;
}
}
}
bool Head_Element(ptr_Queue_List queuelist,elemType *elem)
{//得到隊首元素
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
*elem=queuelist->front->next->value;
return true;
}
}
bool Rear_Element(ptr_Queue_List queuelist,elemType *elem)
{//得到隊尾元素
if(Is_QueueList_Empty(queuelist))
{
printf("The queuelist is empty.\n");
return false;
}
else
{
*elem=queuelist->rear->value;
return true;
}
}
void Destroy_QueueList(ptr_Queue_List queuelist)
{
ptr_Queue_Node p=queuelist->front->next;
ptr_Queue_Node q;
while(p!=queuelist->rear)
{//釋放鏈隊列中的結點
q=p->next;
free(p);
p=q;
}
free(queuelist->rear);//釋放隊尾結點
free(queuelist->front);//釋放隊首結點
}
void Visit_QueueList(ptr_Queue_List queuelist)
{
ptr_Queue_Node p=queuelist->front->next;
while(p)
{
printf("%4d",*p);
p=p->next;
}
printf("\n");
}
測試代碼:
#include "stdafx.h"
#include "list_queue.h"
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
elemType elem;
ptr_Queue_List queuelist;
queuelist=Init_QueueList();
if(queuelist)
{
printf("We have a new queuelist.\n");
printf("The length of the new queuelist is:%d\n",QueueList_Length(queuelist));
}
Enter_QueueList(queuelist,3);
Enter_QueueList(queuelist,8);
Enter_QueueList(queuelist,11);
Enter_QueueList(queuelist,25);
Enter_QueueList(queuelist,33);
Visit_QueueList(queuelist);
printf("The length of the queuelist is:%d\n",QueueList_Length(queuelist));
if(Head_Element(queuelist,&elem))
{
printf("The head_elem is %d\n",elem);
}
if(Rear_Element(queuelist,&elem))
{
printf("The rear_elem is %d\n",elem);
}
if(Pre_Element(queuelist,1,&elem))
{
printf("The pre_element of position 1 is %d\n",elem);
}
if(Pre_Element(queuelist,3,&elem))
{
printf("The pre_element of position 3 is %d\n",elem);
}
if(Next_Element(queuelist,QueueList_Length(queuelist),&elem))
{
printf("The next_elem of position %d is %d\n",QueueList_Length(queuelist),elem);
}
if(Next_Element(queuelist,3,&elem))
{
printf("The next_elem of position 3 is %d\n",elem);
}
if(Cur_Element(queuelist,2,&elem))
{
printf("The cur_elem of position 2 is %d\n",elem);
}
if(Cur_Element(queuelist,9,&elem))
{
printf("The cur_elem of position 9 is %d\n",elem);
}
Delete_QueueList(queuelist,&elem);
Visit_QueueList(queuelist);
if(Head_Element(queuelist,&elem))
{
printf("The head_elem is %d\n",elem);
}
Delete_QueueList(queuelist,&elem);
Visit_QueueList(queuelist);
if(Rear_Element(queuelist,&elem))
{
printf("The rear_elem is %d\n",elem);
}
printf("The length of the queuelist is %d\n",QueueList_Length(queuelist));
Delete_QueueList(queuelist,&elem);
Visit_QueueList(queuelist);
Delete_QueueList(queuelist,&elem);
Delete_QueueList(queuelist,&elem);
printf("The length of the queuelist is %d\n",QueueList_Length(queuelist));
Delete_QueueList(queuelist,&elem);
getch();
return 0;
}
#include "list_queue.h"
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
elemType elem;
ptr_Queue_List queuelist;
queuelist=Init_QueueList();
if(queuelist)
{
printf("We have a new queuelist.\n");
printf("The length of the new queuelist is:%d\n",QueueList_Length(queuelist));
}
Enter_QueueList(queuelist,3);
Enter_QueueList(queuelist,8);
Enter_QueueList(queuelist,11);
Enter_QueueList(queuelist,25);
Enter_QueueList(queuelist,33);
Visit_QueueList(queuelist);
printf("The length of the queuelist is:%d\n",QueueList_Length(queuelist));
if(Head_Element(queuelist,&elem))
{
printf("The head_elem is %d\n",elem);
}
if(Rear_Element(queuelist,&elem))
{
printf("The rear_elem is %d\n",elem);
}
if(Pre_Element(queuelist,1,&elem))
{
printf("The pre_element of position 1 is %d\n",elem);
}
if(Pre_Element(queuelist,3,&elem))
{
printf("The pre_element of position 3 is %d\n",elem);
}
if(Next_Element(queuelist,QueueList_Length(queuelist),&elem))
{
printf("The next_elem of position %d is %d\n",QueueList_Length(queuelist),elem);
}
if(Next_Element(queuelist,3,&elem))
{
printf("The next_elem of position 3 is %d\n",elem);
}
if(Cur_Element(queuelist,2,&elem))
{
printf("The cur_elem of position 2 is %d\n",elem);
}
if(Cur_Element(queuelist,9,&elem))
{
printf("The cur_elem of position 9 is %d\n",elem);
}
Delete_QueueList(queuelist,&elem);
Visit_QueueList(queuelist);
if(Head_Element(queuelist,&elem))
{
printf("The head_elem is %d\n",elem);
}
Delete_QueueList(queuelist,&elem);
Visit_QueueList(queuelist);
if(Rear_Element(queuelist,&elem))
{
printf("The rear_elem is %d\n",elem);
}
printf("The length of the queuelist is %d\n",QueueList_Length(queuelist));
Delete_QueueList(queuelist,&elem);
Visit_QueueList(queuelist);
Delete_QueueList(queuelist,&elem);
Delete_QueueList(queuelist,&elem);
printf("The length of the queuelist is %d\n",QueueList_Length(queuelist));
Delete_QueueList(queuelist,&elem);
getch();
return 0;
}