实验三 栈应用 实验报告

发布时间:2024-11-17

行编辑程序 实验报告

一、 实验内容和目的

实验目的:掌握栈的储存结构及其描述

掌握栈的建立、插入和删除操作

实验内容:1. 栈的建立

2. 入栈和出栈操作

3. 清空栈操作

二、 实验原理

利用栈的特性(后进先出),把用户输入的字符储存到栈中,并通过事先规定好的字符(如’#’,’@’)对栈中的数据进行操作,实现行编辑器的功能。

当用户输入的不是事先约定的控制符,则把该字符进行入栈操作;

当用户输入的是约定的退格符(本实验中的退格符为’#’),把栈顶元素出栈,从而实现删除字符的操作;

当用户输入的是约定的退行符(本实验中的退格符为’@’),则清空栈,实现整行删除的功能。

当用户按下回车(即输入换行符’\n’时),即表明用户输入完毕,然后依次把栈中元素从栈底到栈顶输出。

三、 程序流程图

四、 实验结果

4.1 程序的主界面

4.2 输入whli##ilr#e(s#*s) 以后

五、 操作说明

本程序处理范围仅限于一行字符,回车即表示全部字符输入结束。

程序运行以后,程序出于等待输入的状态(程序会提示“请在下面输入内容”),输入您要编辑的内容。按回车输入结束

在输入期间,如果要退格,请在英文输入法状态下输入符号’#’,如果要清空整行的所有字符,同样地,请在英文输入法状态下输入符号’@’,会清空前面输入所有的字符。 所有的字符输入完成以后,按下回车键。程序会处理所有的数据,并将处理以后所有的有效数据进行输出。

六、 附录:代码

#include <stdio.h>

#include <stdlib.h>

#define MAX_STACK_SIZE 200

#define OK 0

#define MALLOC_FAIL 1

// 表示栈上溢

#define OVERFLOW 1

// 表示栈下溢

#define

UNDERFLOW -1

typedef char SElemType;

typedef struct {

/* 栈基本功能的实现*/

// 栈的初始化

// 如果初始化成功,返回OK;如果不成功,返回MALLOC_FAIL int Stack_Init(SqStack *stack)

{

}

// 清空栈

void Stack_Clear(SqStack *stack)

{

}

// 把元素e 插入到栈stack 里面

// 如果栈已满,返回OVERFLOW

// 元素成功存入栈,返回OK

int Stack_Push(SqStack *stack, SElemType e) {

// 如果栈已满,返回错误信息 if (stack->stacksize == MAX_STACK_SIZE) return OVERFLOW; stack->top = stack->base; stack->stacksize = 0; // 初始化成功,返回成功信息 return OK; stack->top = stack->base; stack->stacksize = 0; // 如果不能分配到空间:返回错误信息 if (!stack->base) return MALLOC_FAIL; // 为栈分配空间 stack->base = (SElemType *)malloc(MAX_STACK_SIZE * sizeof(SElemType)); SElemType *base; SElemType *top; int stacksize; } SqStack;

}

// 把元素储存到栈里面,top 指针移动,计数加一 *(stack->top++) = e; stack->stacksize++; return OK;

// 把栈顶元素赋值给e,再在栈里删除栈顶元素 // 如果栈已空,返回UNDERFLOW

// 如果元素成功出栈,返回OK

int Stack_Pop(SqStack *stack, SElemType *e) {

}

/* 程序功能的实现*/

int main()

{

// 如果栈初始化失败,退出程序 if (Stack_Init(stack) != OK) { printf("栈初始化发生错误\n"); system("pause"); // 如果栈空间分配失败,退出程序 if (!stack) { } printf("分配栈空间发生错误\n"); system("pause"); exit(0); SqStack *stack = (SqStack *)malloc(sizeof(SqStack)); SElemType e, tmp; int i; return OK; // 把栈顶元素储存到e 中,然后top 指针下移 *e = *(--stack->top); stack->stacksize--; // 如果栈已空,返回错误信息 if (stack->stacksize == 0) return UNDERFLOW;

} } exit(0); printf("输入错误时,可以输入'#' 删除前一个字符,输入'@' 则把整行内容清除\n按回车表示输printf("\n请在下面输入内容:\n"); // 从键盘读入一个字符,如果不是换行符,进行循环 while ((e = getchar()) != '\n') { } printf("\n输入的有效内容为:\n"); // 将栈中的所有元素从栈底开始输出 for (i = 0; i < stack->stacksize; i++) putchar(stack->base[i]); if (e == '#') { } else if (e == '@') Stack_Clear(stack); // 如果栈满,输出提示信息,并停止读入字符 if (Stack_Push(stack, e) == OVERFLOW) { } printf("栈已满!\n"); break; else Stack_Pop(stack, &tmp); printf("\b"); 入结束\n"); printf("\n\n"); system("pause"); return 0;

实验三 栈应用 实验报告.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219