1. 程式人生 > >資料結構——佇列的鏈式表示和實現

資料結構——佇列的鏈式表示和實現

/*
    佇列的鏈式表示和實現
    2018.04.20
*/

#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW -1

typedef int Status;

//typedef struct{
//  char name[20];
//  char no[20];
//  double price;
//}BOOK;

typedef struct QNode{
    char data;
    struct
QNode *next; }QNode,*QueuePtr; typedef struct{ QueuePtr front; //對頭指標 QueuePtr rear; //隊尾指標 }LinkQueue; //鏈隊的初始化 //演算法步驟: //1.生成新結點作為頭結點,對頭和隊尾指標指向此結點; //2.頭結點的指標域置空; Status InitQueue(LinkQueue &Q){ //構造一個空列隊Q Q.front=Q.rear=new QNode; Q.front->next=NULL; return OK; } //鏈隊的入隊 //演算法步驟:
//1.為入隊元素分配節點空間,用指標p指向; //2.將新結點的資料域置為e; //3.將新結點插入到隊尾; //4.修改隊尾指標為p; Status EnQueue(LinkQueue &Q,char e){ //插入元素e為Q的新的隊尾元素 QueuePtr p=new QNode; p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; return OK; } //鏈隊的出隊 //演算法步驟: //1.判斷佇列是否為空,若空則返回ERROR; //2.臨時儲存隊頭元素的空間,以備釋放; //3.修改對頭指標,指向下一個結點;
//4.判斷出隊元素是否為最後一個元素,若是,則將隊尾指標重新賦值,指向頭結點; //5.釋放原隊頭元素的空間; Status DeQueue(LinkQueue &Q,char &e){ //刪除Q的隊頭元素,用e返回其值 if(Q.front==Q.rear) return ERROR; //若列隊為空,則返回ERROR QueuePtr p; //建立新指標 p=Q.front->next; //p指向隊頭指標 e=p->data; //e儲存隊頭元素的值 Q.front->next=p->next; //修改頭指標 if(Q.rear==p) //若最後一個元素被刪,隊尾指標指向頭結點 Q.rear=Q.front; delete p; //釋放原隊頭元素的空間 return OK; } //取鏈隊的隊頭元素 //演算法步驟: //當佇列非空時,此操作返回當前隊頭元素的值,隊頭指標保持不變; char GetHead(LinkQueue Q){ //返回Q的隊頭元素,不修改隊頭指標 if(Q.front!=Q.rear) return Q.front->next->data; } int main(){ LinkQueue Q; while(1){ int option=0; char str; system("cls"); cout<<"鏈隊的表示與實現"<<endl; cout<<"1.鏈隊的初始化"<<endl; cout<<"2.鏈隊的入隊"<<endl; cout<<"3.鏈隊的出隊"<<endl; cout<<"4.取出隊頭元素"<<endl; cout<<"0.退出"<<endl; cout<<"請輸入你的選擇:"; cin>>option; switch(option){ case 1: if(InitQueue(Q)==OK) cout<<"1.Success!"<<endl; else cout<<"1.Error!"<<endl; system("pause"); break; case 2: cout<<"Plesea input str:"; cin>>str; if(EnQueue(Q,str)==OK) cout<<"2."<<str<<" input successly!"<<endl; else cout<<"2.Error!"<<endl; system("pause"); break; case 3: if(DeQueue(Q,str)==OK){ cout<<"3.出隊成功!"<<endl; cout<<"The str is "<<str<<endl; } else cout<<"3.Error!"<<endl; system("pause"); break; case 4: str=GetHead(Q); cout<<"當前隊頭元素是:"<<str<<endl; system("pause"); break; case 0: exit(0); break; default: cout<<"Your Input Is Wrong!"<<endl; system("pause"); break; } } return 0; }