队列的应用

16 篇文章 1 订阅
12 篇文章 0 订阅
/*
 * 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);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值