4-16 双端队列 (25分)

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define ERROR -1
typedef int ElementType;
#define false 0
#define true 1
typedef enum { push, pop, inject, eject, end } Operation;
//typedef enum { false, true } bool;
typedef int Position;
typedef struct QNode *PtrToQNode;
struct QNode {
    ElementType *Data;      
    Position Front, Rear;   
    int MaxSize;            
};
typedef PtrToQNode Deque; 
Deque CreateDeque( int MaxSize )
{  
    Deque D = (Deque)malloc(sizeof(struct QNode));
    MaxSize++;
    D->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
    D->Front = D->Rear = 0;
    D->MaxSize = MaxSize;
    return D;
}
bool Push( ElementType X, Deque D );
ElementType Pop( Deque D );
bool Inject( ElementType X, Deque D );
ElementType Eject( Deque D );
Operation GetOp();          
void PrintDeque( Deque D ); 
int main()
{
    ElementType X;
    Deque D;
    int N, done = 0;
    scanf("%d", &N);
    D = CreateDeque(N);
    while (!done) {
        switch(GetOp()) 
        {
        case push: 
            scanf("%d", &X);
            if (!Push(X, D)) printf("Deque is Full!\n");
            break;
        case pop:
            X = Pop(D);
            if ( X==ERROR ) printf("Deque is Empty!\n");
            else printf("%d is out\n", X);
            break;
        case inject: 
            scanf("%d", &X);
            if (!Inject(X, D)) printf("Deque is Full!\n");
            break;
        case eject:
            X = Eject(D);
            if ( X==ERROR ) printf("Deque is Empty!\n");
            else printf("%d is out\n", X);
            break;
        case end:
            PrintDeque(D);
            done = 1;
            break;
        }
    }
    return 0;
}
bool Push( ElementType X, Deque D )
{
    if( (D->Rear+1)%(D->MaxSize)==D->Front)
    {
        return false;
    }
    D->Front = (((D->Front )- 1) + D->MaxSize) % D->MaxSize;
    D->Data[D->Front]=X;
    return true;
}
ElementType Pop( Deque D )
{
    ElementType X;
    if((D->Rear==D->Front))
        return ERROR;
    X=D->Data[D->Front];
    D->Front=((D->Front)+1)%(D->MaxSize);
    return X;
}
bool Inject( ElementType X, Deque D )
{
    if( ((D->Rear)+1)%(D->MaxSize)==D->Front )
    {
        return false;
    }
    D->Data[D->Rear]=X;
    D->Rear=((D->Rear)+1)%(D->MaxSize);
    return true;
}
ElementType Eject( Deque D )
{
    ElementType X;
    if ( (D->Rear) == (D->Front) )
    {
        return ERROR;
    }
    D->Rear=(((D->Rear)-1)+(D->MaxSize))%(D->MaxSize);
    X=D->Data[D->Rear];
    return X;
}
Operation GetOp()
{
    char opt[7];
    scanf("%s", opt);
    if (strcmp(opt, "Push") == 0)
    {
        return push;
    }
    else 
        if (strcmp(opt, "Pop") == 0)
        {
            return pop;
        }
        else 
            if (strcmp(opt, "Inject") == 0)
            {
                return inject;
            }
            else 
                if (strcmp(opt, "Eject") == 0)
                {
                    return eject;
                }
                else 
                    if (strcmp(opt, "End") == 0)
                    {
                        return end;
                    }
}
void PrintDeque(Deque D)
{
    printf( "Inside Deque:" );
    while (D->Front!=D->Rear )
    {
        printf(" %d",D->Data[D->Front]);
        D->Front=((D->Front)+1)%(D->MaxSize);
    }
}
辽大考研复试的一点心得体会辽宁大学于 2020-06-20 06:27:56 发布阅读量2.1k 收藏 16点赞数 4类专栏: 考研 文章标签: 考研版权考研专栏收录该内容3 篇文章订阅专栏 本文享了2019年辽宁大学信息学院计算机专业考研复试经历,包括招生计划、复试流程、专业课笔试与面试问题、听力口语考试等内容,提供给准备报考的考生作为参考。摘要由优快云通过智能技术生成2019年辽宁大学信息学院招生计划: 计算机系统结构4人,计算机软件理论20人,计算机应用技术19人,软件工程(学硕)5人,软件工程(专硕)35人 。关于招生人数方面,学硕基本没有太大变化, 2019年原计划25人扩招到35人 。至于20届不知是否有变化,到时多关注辽大官网即可。每年的考研人数都在上涨,今年国家线相较去年上涨10,可能由于计算机热度太高,今年专硕的竞争压力蛮大的,所以复试也很重要,当时复试的时候一个软件工程(专硕)的小姐姐坐在我旁边,初试排名第39,基本辽大上不了就没有学校上的情况,但是复试发挥比较好,最后排名35名,正好以最后一名上了,特别开心的回家了。辽大会公布官方初试专业课的题目,以及在成绩出来的时候会公布你的专业排名,关于这两点我是非常喜欢的。今年普遍出现高排名不高的情况,我身边的好多同学数挺高的但是不知道自己排名,按照以往数本以为稳进的,结果最后连复试也没进,如果时间再晚的话,调剂都不太好调剂。关于初试专业课,在19年的专业课试卷没有公布前还是老老实实的看王道打好基础吧,按照今年学硕专业课的情况来看应该光看真题是远远不够的。一、复试基本流程18届复试是3月的最后一周的周四周五两天,19届也是如此。20届如果家比较远的话,需要提前买票可以进行时间的参考。二、具体情况及相关注意事项(一)专业课笔试(C语言)19届复试专业课为笔试,没有机试。虽然官网公布为C语言笔试,但是不仅考了c语言的内容,满100,后面40都是数据结构的题目。无选择填空读程序结果。共8道编程题。为初级编程6题和高级编程2题。以下为19届学长学姐回忆题目,20届考生可以进行参考。初级:①从键盘上输入数字1-7,输出对应的日期。②计算从100-500的所有素数个数以及其中所有素数之和。③输出5*5矩阵中的最大值和最小值,以及其下标。④从输入的字符串中找出数字,并将其删除后输出。⑤定义结构体typedef struct{int sno;char name [10];}从键盘上输入学生信息,并将其写入文件“student.dat”中,输入学号为0时即停止输入。⑥递归方法写出直接插入排序。高级:(1)关于链表的大题①初始化带头结点的链表A②构造有N个节点的非递减链表③将链表A中不重复的数字复制到链表B中 (2)关于双端队列的大题①初始化队列②关于从队头队尾插入元素的问
03-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值