栈的数据结构实验报告

发布时间:2024年01月05日

一、实验目的:

1、理解栈的定义;

2、利用栈处理实际问题。

二、实验内容(实验题目与说明)

利用栈实现数据的分类,将输入的整数以奇偶为标准分别存放到两个栈中,并最终从栈1和栈2输出偶数和奇数序列。

三、算法设计(核心代码或全部代码)

#include <stdio.h>

#include <stdlib.h>

#define max 100 // 栈最大容量

typedef struct Stack {

????int data[max];

????int top;

} Stack;

// 将栈顶指针设为-1,表示栈为空

void initStack(Stack *s) {

????s->top = -1;

}

// 栈是否为空

int isEmpty(Stack *s) {

????return s->top == -1;

}

// 栈是否已满

int isFull(Stack *s) {

????return s->top == max - 1;

}

// 入栈

void push(Stack *s, int x) {

????if (isFull(s)) {

????????printf("Stack is full\n");

????????return;

????}

????s->data[++(s->top)] = x;

}

// 出栈

int pop(Stack *s) {

????if (isEmpty(s)) {

????????printf("Stack is empty\n");

????????return -1;

????}

????return s->data[(s->top)--];

}

// 获取栈顶元素

int peek(Stack *s) {

????if (isEmpty(s)) {

????????printf("Error: Stack is empty\n");

????????return -1;

????}

????return s->data[s->top];

}

// 分类函数

void classify(Stack *s1, Stack *s2) {

????int x;

????printf("请输入一组整数,以0结束输入:\n");

????scanf("%d", &x);

????while (x != 0) {

????????if (x % 2 == 0) {

????????????push(s1, x); // 偶数入栈s1

????????} else {

????????????push(s2, x); // 奇数入栈s2

????????}

????????scanf("%d", &x); // 继续输入下一个整数

????}

}

// 输出函数

void output(Stack *s1, Stack *s2) {

????printf("偶数序列为:");

????while (!isEmpty(s1)) {

????????printf("%d ", pop(s1)); // 从s1中依次弹出偶数

????}

????printf("\n奇数序列为:");

????while (!isEmpty(s2)) {

????????printf("%d ", pop(s2)); // 从s2中依次弹出奇数

????}

????printf("\n");

}

int main() {

????Stack s1, s2;

????initStack(&s1);

????initStack(&s2);

????classify(&s1, &s2);

????output(&s1, &s2);

????return 0;

}

  • 运行与测试(测试数据和实验结果分析

使用栈时,可能会遇到栈溢出或栈下溢的问题。栈溢出指尝试将数据推入一个已满的栈时发生的错误。为了避免栈溢出,在推入和弹出元素之前先检查栈是否已满。栈下溢则是指尝试从一个空栈中弹出数据时发生的错误。为了避免栈下溢,需要在弹出元素之前检查栈是否为空。另外需要确保正确地操作栈顶指针和数据存放顺序

  • 总结与心得

通过编写这段代码,我更深入地理解了栈的基本概念和操作,熟悉栈的应用场景。栈是一种后进先出的数据结构,只能在栈顶进行插入和删除操作。将一组整数按照奇偶性分类存储到两个不同的栈中,并按照出栈的顺序输出分类结果。这是栈的一个常见应用场景。通过这个实验,我更清楚地认识到栈在问题解决中的作用。

文章来源:https://blog.csdn.net/2301_76690905/article/details/135408208
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。