連結串列實現順序佇列
#include<iostream> using namespace std; typedef struct node { int value; struct node *next; }Node; typedef struct queue { Node *front; Node *rear; }Queue;
Node* CreateNode(int val) { Node *newnode=(Node*)malloc(sizeof(Node)); if(newnode==NULL) return NULL; else { newnode->value=val; newnode->next=NULL; return newnode; } } void Enqueue(Queue *q,int val) { Node *newnode=CreateNode(val); if(newnode==NULL) return; else { q->rear->next=newnode; q->rear=newnode; } } int QueueLength(Queue *q) { int cnt=0; Node *f=q->front; while(f) { cnt++; f=f->next; } return cnt; } void Dequeue(Queue *q) { if(!QueueLength(q)) //鏈佇列為空 { cout<<"沒有可以刪除的元素"<<endl; return; } Node *p; p=q->front; q->front=p->next; cout<<"刪去元素:"<<p->value<<endl; free(p); return; } void PrintQueue(Queue *q) { Node *f=q->front; if(!QueueLength(q)) { cout<<"佇列為空"<<endl; return; } cout<<"佇列現有元素:"; for(int i=0;i<QueueLength(q);i++) { cout<<f->value<<" "; f=f->next; } cout<<endl; return; } int main() { Queue q; int a[]={1,2,3,4,5}; q.front=(Node*)malloc(sizeof(Node)); if(!q.front) return 0; q.front->next=NULL; q.front->value=a[0]; q.rear=q.front; for(int i=1;i<5;i++) Enqueue(&q,a[i]); PrintQueue(&q); cout<<"佇列中元素個數為:"<<QueueLength(&q)<<endl; Dequeue(&q); cout<<"佇列中元素個數為:"<<QueueLength(&q)<<endl; Node *f2=q.front; PrintQueue(&q); return 0; }