栈和队列的基本操作

发布时间: 更新时间: 总字数:1350 阅读时间:3m 作者: 分享

实验四:栈和队列的基本操作

实验四:栈和队列的基本操作

(1)采用链式存储实现栈的初始化、入栈、出栈操作。
(2)采用顺序存储实现栈的初始化、入栈、出栈操作。
(3)采用链式存储实现队列的初始化、入队、出队操作。
(4)采用顺序存储实现循环队列的初始化、入队、出队操作。
(5)在主函数中设计一个简单的菜单,分别测试上述算法。

综合训练:(1)利用栈实现表达式求值算法。
(2)利用栈实现迷宫求解。
(3)编写c语言程序利用队列打印一个杨辉三角形的前n行。

1
1  1
1  2  1
1  3  3
1
1  4  6 
4  1

源码

#include<stdio.h>
#include"xxb.h"
int main()
{
    print();
    int ncase, n1, n2, n3, n4;
    bool flag = true;
    bool f1, f2, f3, f4;
    SqStack s;
    LinkLStack ls;
    SqQueue Q;
    LinkQueue LQ;
    int e;
    while (scanf("%d", &ncase) != EOF)
    {
        f1 = true;
        f2 = true;
        f3 = true;
        f4 = true;

        switch (ncase)
        {
        case 1:
            print1();
            IniLStack(ls);
            while (scanf("%d", &n1) != EOF)
            {
                switch (n1)
                    {
                    case 1:
                    if (IniLStack(ls))
                        printf("链式栈建立成功!\n");
                    else
                        printf("链式栈建立失败!\n");
                    break;
                    case 2:
                    if (PushLStack(ls, e))
                        printf("入栈成功!\n");
                    else
                        printf("入栈失败!\n");
                    break;
                    case 3:
                    if (PopLStack(ls, e))
                        printf("e = %d出栈成功!\n", e);
                    else
                        printf("栈为空!\n");
                    break;
                    case 0:
                    f1 = false;
                    break;
                    default:
                    printf("    
                    输入有误,请重新输入!\n");
                    break;
                    }
                if (!f1)
                    break;
                print1();
            }
            break;
        case 2:
            print2();
            while (scanf("%d", &n2) != EOF)
            {
                switch (n2)
                    {
                    case 1:
                    if (Initack(s))
                        printf("顺序栈建立成功!\n");
                    else
                        printf("顺序建立失败!\n");
                    break;
                    case 2:
                    if (Push(s, e))
                        printf("入栈成功!\n");
                    else
                        printf("入栈失败!\n");
                    break;
                    case 3:
                    if (!Pop(s, e))
                        printf("顺序栈为空!\n");
                    else
                        printf("e = %d出栈成功!\n", e);
                    break;
                    case 0:
                    f2 = false;
                    break;
                    default:
                    printf("    
                    输入有误,请重新输入!\n");
                    break;
                    }
                if (!f2)
                    break;
                print2();
            }
            break;
        case 3:
            print3();
            while (scanf("%d", &n3) != EOF)
            {
                switch (n3)
                    {
                    case 1:
                    if (InitQueue(LQ))
                        printf("链式队列构造成功!\n");
                    else
                        printf("链式队列构造失败!\n");
            
                    break;
                    case 2:
                    printf("请输入如队列元素e=");
                    scanf("%d", &e);
                    if (EnQueue(LQ, e))
                        printf("链式队列入列成功!\n");
                    else
                        printf("链式队列入列失败!\n");
                    break;
                    case 3:
                    if (DeQueue(LQ, e))
                        printf("e = %d出队列成功!\n", e);
                    else
                        printf("队列为空!\n");
                    break;
                    case 0:
                    f4 = false;
                    break;
                    default:
                    printf("    
                    输入有误,请重新输入!\n");
                    break;
                    }
                if (!f4)
                    break;
                print4();
            }
            break;
        case 4:
            print4();
            while (scanf("%d", &n4) != EOF)
            {
                switch (n4)
                    {
                case 1:
                    if (InitQueue(Q))
                                printf("顺序队列初始化成功!\n");
                    else
                        printf("顺序队列初始化失败!\n");
                    break;
                    case 2:
                    printf("请输入如队列元素e=");
                    scanf("%d", &e);
                    if (EnQueue(Q, e))
                        printf("插入队列成功!\n");
                    else
                        printf("插入失败!\n");
                    break;
                    case 3:
                    if (DeQueue(Q, e))
                        printf("e = %d出队列成功!\n", e);
                    else
                        printf("队列为空!\n");
                    break;
                    case 0:
                    f3 = false;
                    break;
                    default:
                    printf("    
                    输入有误,请重新输入!\n");
                    break;
                    }
                if (!f3)
                    break;
                print3();
            }
            break;
        case 0:
            flag = false;
            break;
        default:
            printf("    
            输入错误,请重新输入,谢谢!\n");
            break;
        }
        if (!flag)
            break;
        print();
    }
    return 0;
}

参考

Home Archives Categories Tags Docs