队列的应用
                            
                            
                            /** chen.cpp : 定義控制臺應用程序的入口點。**/#include "stdafx.h"
#include <iostream>
#include <stdlib.h>using namespace std;
typedef int QElemType;
#define MAXNUM 255/* 定義存儲信息的節點 */
struct MessageNode {char            data[MAXNUM];struct MessageNode  *next;
};/* 定義隊列 */
struct MyQueue {/* 頭部指針 */MessageNode *front;/* 尾部指針 */MessageNode *rear;/* 存儲的信息數量 */int number;
};/** 出隊操作* e元素出隊*/
void de_Queue( MyQueue *q, char message[] )
{if ( q->front == q->rear )return;MessageNode *temp = q->front->next;if ( q->front->next == q->rear )q->rear = q->front;strcpy( message, temp->data );q->front->next = temp->next;free( temp );
}/* 打印隊列元素 */
void dispalyMessage( MyQueue *q )
{if ( q->front == q->rear )return;MessageNode *temp   = q->front->next;int     index   = 1;while ( temp != q->rear ){cout << index++ << " " << temp->data << endl;temp = temp->next;}cout << index++ << " " << temp->data << endl;
}/* 初始化隊列 */
void init_Queue( MyQueue *q )
{q->front    = q->rear = (MessageNode *) malloc( sizeof(MessageNode) );q->front->next  = NULL;q->number   = 0;
}/* 插入元素e進入隊列 */
void en_Queue( MyQueue *q, char message[] )
{MessageNode *temp = (MessageNode *) malloc( sizeof(MessageNode) );if ( temp ){if ( q->number < 20 ){strcpy( temp->data, message );temp->next  = NULL;q->rear->next   = temp;q->rear     = temp;q->number++;}else{char temp[MAXNUM];de_Queue( q, temp );q->number--;en_Queue( q, message );}}
}/* 清空隊列 */
void clear( MyQueue *q )
{MessageNode *temp = q->front->next;while ( temp ){MessageNode *tp = temp;temp = temp->next;free( tp );}temp        = q->front;q->front    = q->rear = NULL;free( temp );
}/* 獲取第N個數據 */
void top_Queue( MyQueue *q, int n, char message[] )
{if ( q->front == q->rear )return;MessageNode *temp   = q->front->next;int     index   = 1;while ( temp != q->rear ){if ( index == n ){cout << index << " ---- " << temp->data << endl;break;}temp = temp->next;index++;}if ( index == n ){cout << index++ << temp->data << endl;}
}\void menu()
{cout << "請選擇操作:" << endl;cout << "r:接收短信" << endl;cout << "l:顯示第i條短信" << endl;cout << "a:顯示所有的短信" << endl;cout << "u:刪除所有的短信" << endl;cout << "q:退出" << endl;
}int main()
{char    message[MAXNUM];MyQueue queue;init_Queue( &queue );while ( true ){system( "cls" );char index;menu();cin >> index;system( "cls" );cout << index << endl;switch ( index ){case 'r':cout << "請輸入短信信息:" << endl;char message[MAXNUM];cin >> message;en_Queue( &queue, message );break;case 'l':int select_i;cout << "請輸入要查詢i的值:";cin >> select_i;top_Queue( &queue, select_i, message );/* cout<<"信息內容為:"<<message<<endl; */break;case 'a':dispalyMessage( &queue );break;case 'd':int i;cout << "請輸入要刪除的i的值:";cin >> i;top_Queue( &queue, i, message );cout << "信息內容為:" << message << endl;break;case 'u':cout << "即將刪除所有的值:Y/N" << endl;char flag;cin >> flag;if ( flag == 'Y' ){clear( &queue );cout << "刪除成功" << endl;}else if ( flag == 'N' ){cout << "未刪除" << endl;}break;case 'q':cout << "謝謝使用" << endl;exit( 0 );break;}cout << "按任意鍵繼續" << endl;system( "pause" );}system( "pause" );return(0);
}
                            
                        
                        
                        總結
                            
                        - 上一篇: 利用栈进行程序的括号匹配
 - 下一篇: 稀疏矩阵的运算