/*
* 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);
}
队列的应用
猜你喜欢
转载自blog.csdn.net/qq_33466466/article/details/80004926
今日推荐
周排行