数据结构实验栈代码演示

这里使用C++环境:目的使用&引用符,除此以外是C语言代码

#define _CRT_SECURE_NO_WARNINGS 1
#define MAXSIZE 100//存储空间初始化分配量
#define STACKINCREMENT 10//存储空间分配增量
#define  ERROR 1
#define OVERFLOW 0
#define OK -2

#include <stdio.h>
#include <stdlib.h>

typedef int SElemType;
typedef int Status;
typedef struct {
	
	SElemType* base;//在栈构造之前和销毁之后,值为NULL
	SElemType* top;//栈顶指针
	int stacksize;//当前已分配的存储空间,以元素为单位
}SqStack;

Status InitStack(SqStack& S) //建立空栈 S
{
	S.base = (SElemType*)malloc(MAXSIZE * sizeof(SElemType));
	if (!S.base) {
		exit(OVERFLOW);//存储分配失败
	}
	S.top = S.base;
	S.stacksize = MAXSIZE;
	return OK;
}

Status Push(SqStack& S, SElemType e) {
	//插入元素e为栈顶元素
	if (S.top - S.base >= S.stacksize){//栈满
		S.base = (SElemType*)realloc(S.base, S.stacksize + STACKINCREMENT
			* sizeof(SElemType));//追加存储空间
		if (!S.base) {
			exit(OVERFLOW);//存储分配失败
		}
		S.top = S.base + S.stacksize;
		S.stacksize += STACKINCREMENT;
	}
	*(S.top++) = e;
	return OK;
}

Status Pop(SqStack& S, SElemType& e){
	//删除S的栈顶元素,用e返回值,返回OK
	if (S.top == S.base) {
		return ERROR;
	}//空栈
	e = *(--S.top);
	return OK;
}
	
Status StackEmpty(SqStack &S){
	//判断是否为空栈
	if (S.top == S.base) {
		return OK;
	}
	else {
		return ERROR;
	}

}

Status PrintStack(SqStack S) {
	//打印栈中元素
	int a=StackEmpty(S);
	if (a > 0) {//不是空栈
		while (S.top!=S.base) {
			int e = *(--S.top);
			printf("%d\n", e);
		}
	}
	else if (a < 0) {
		printf("这是个空栈\n");
	}
	return OK;
}

void OperateMenu() {
	printf("0.:退出,1.:插入,2.:删除,3.:判断是否为空栈,4.:打印,5.:清空栈,6.:栈的长度\n");

}

void ClearStack(SqStack& S) {
	//清空栈
	while (S.top != S.base) {
		int e = 0;
		int a = Pop(S, e);
	}
	
}

int LengthStack(SqStack S) {
	//栈的长度
	int a = StackEmpty(S);
	int i = 0;
	if (a > 0) {//不是空栈
		while (S.top != S.base) {
			int e = *(--S.top);
			i++;
		}
	}
	else if (a < 0) {
		printf("这是个空栈\n");
	}
	printf("栈长度为:%d\n", i);
	return i;
}

int main() {
	SqStack S;
	S.base = S.top = NULL;
	int a = InitStack(S);
	OperateMenu();
	printf("请选择功能:\n");
	
	int e;
	int c;
	while (1) {
		scanf("%d", &a);
		switch (a){
		case 0:return 0;
		case 1:
			printf("请输入要插入栈顶的元素\n");
			scanf("%d", &e);
			Push(S, e);
			OperateMenu();
			break;
		case 2:
			Pop(S, e);
			OperateMenu();
			break;
		case 3:
			c=StackEmpty(S);
			if (c == OK) {
				printf("空栈\n");
			}
			else {
				printf("不是空栈\n");
			}
			OperateMenu();
			break;
		case 4:
			PrintStack(S);
			OperateMenu();
			break;
		case 5: ClearStack(S);
			OperateMenu();
			break;
		case 6:
			LengthStack(S);
			OperateMenu();
			break;
		

		default:
			printf("输入有误,请重新输入\n:");
			OperateMenu();
			break;
		}

	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当编制数据结构教学计划时,可以考虑以下几个方面的内容: 1. 教学目标:明确教学的目标和重点,例如学生应该掌握的基本概念、算法和数据结构的应用等。 2. 教学内容:确定教学内容的范围和深度,包括但不限于线性表、、队列、树、图等数据结构的基本知识和相关算法。 3. 教学方法:选择适合的教学方法,例如讲授、实践、案例分析、小组讨论等,以提高学生的理解和应用能力。 4. 教学资源:准备教学所需的资源,包括教材、课件、实验室设备等,以支持教学过程中的实践和演示。 5. 教学评估:设计合适的评估方式,例如作业、考试、项目等,以检验学生对数据结构的理解和应用能力。 编制代码方面,可以考虑以下几个步骤: 1. 确定代码实现语言:选择一种适合教学的编程语言,例如C++、Java等。 2. 设计数据结构类:根据教学内容,设计相应的数据结构类,例如链表、、队列等。 3. 实现基本操作:在每个数据结构类中,实现基本的操作方法,例如插入、删除、查找等。 4. 编写示例代码:编写一些示例代码演示如何使用数据结构类进行操作和解决问题。 5. 提供注释和说明:在代码中添加注释和说明,解释每个方法的功能和使用方法,以便学生理解和学习。 6. 整理代码文档:将代码整理成文档形式,包括教学目标、代码实现、示例代码和注释说明等内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值