数据结构头歌:2-1顺序栈-课上练(带超全注释+源代码)

2024-03-11 10:20

本文主要是介绍数据结构头歌:2-1顺序栈-课上练(带超全注释+源代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、

二、初始化一个空的顺序栈

三、判断顺序栈是否为空

四、判断顺序栈是否已满

五、压栈push:插入数据元素x

六、弹栈pop:删除元素

七、取栈顶元素

 八、利用栈实现数进制转换

1.弹出元素->输出

2.data转换成k进制

创建栈L

转换成二进制:

转换成八进制:

转换成16进制:

1.定义: 

 2.除法(n ≠ 0) push

 3.pop

#include <stdio.h>
#include<stdlib.h>
/*此处是顺序栈数据结构定义*/
typedef int DataType;
struct seqStack
{//有3个数据成员int MAXNUM;//用于记录顺序栈中能存放的最大元素个数的 整型 MAXNUM   int top;//用于存放顺序栈的栈顶位置,初始化为0或-1 均可  整型  curNumDataType* element;//用于存放顺序栈数据元素的连续空间的起始地址  
};
typedef struct seqStack* PseqStack;//第一关
PseqStack createNullStack_seq(int m)
{//此处填写代码,创建一个空的顺序栈,能存放的最大元素个数为 m,栈顶top设置为0//若m=0,则返回NULL PseqStack p = (PseqStack)malloc(sizeof(struct seqStack));//动态创建一个PseqStack类型的变量p,//不小于 sizeof(struct seqStack)字节 if (m != 0)  //m:能存放的最大元素个数 {p->element = (DataType*)malloc(m * sizeof(DataType));//元素分配空间 if (p->element){p->top = 0;   //下溢:空栈进行出栈 p->MAXNUM = m;//上溢: 已有m个元素进行进栈 return p; }else free(p);}return NULL;
}//第二关
int isNullStack_seq(PseqStack L)
{//判断顺序栈是否为空,若为空,返回值为1,否则返回值为0,若栈不存在,则返回-1if (L == NULL)         return -1;else {if (L->top == 0)   return 1;else   return 0; }
}//第三关 
int isFullStack_seq(PseqStack L)
{//判断顺序栈是否已满,若已满,返回值为1,否则返回值为0if (L->top >= L->MAXNUM)return 1;elsereturn 0;
}//第四关
int push_seq(PseqStack L, DataType x)
{//在顺序栈中插入数据元素x,若插入不成功,返回0;插入成功返回值为1if (L->top >= L->MAXNUM)return 0;else{L->top = L->top + 1;     //栈顶=栈顶+1 L->element[L->top] = x;  //给结构体 L中一个数组成员element[]的某一个L->top赋值return 1;}}//第五关
DataType pop_seq(PseqStack L)
{//弹栈并返回删除元素,若栈为空,则返回-1if (L->top == 0)return -1;else{int m = L->element[L->top];//定义栈顶元素m L->top = L->top - 1;       //栈顶=栈顶-1 return m;                  //返回m }
}//第六关 取栈顶元素 
DataType top_seq(PseqStack L)
{//取栈顶元素返回,若栈为空,则返回-1if (L->top == 0)return -1;    //返回-1 elsereturn (L->element[L->top]);//返回栈顶元素 
}
//销毁顺序栈,释放栈所占存储空间
int destroystack_seq(PseqStack L)
{//返回值为销毁的栈中现有数据元素的个数,若待销毁的线性表不存在,则返回0if (L != NULL){int num = L->top + 1;//定义num(销毁的栈中现有数据元素的个数0-top) L->MAXNUM = 0;       //能存放的最大元素个数为0(待销毁的线性表不存在) free(L->element);    //释放元素 ,销毁线性表 return num;          //返回 }return 0;
}//第七关
//使用已实现的栈操作,实现数制转换
void print(PseqStack L)
{//逐个弹出栈L中的数据元素并输出,输出数据间不需要任何间隔符号while (L->top != 0){printf("%d", pop_seq(L));}
}void convert(int data, int k)
{//利用栈实现将data转换为k进制,k可能是2,8,16. 在本函数内实现转换并调用print函数输出转换后的结果//十六进制时输出 A ,B ,C, D,E,F 使用大写字母PseqStack L = createNullStack_seq(200);if (k == 2){int m = data % 2;push_seq(L, m);int n = data / 2;while (n != 0){m = n % 2;n = n / 2;push_seq(L, m);}print(L);}if (k == 8){int m = data % 8;push_seq(L, m);int n = data / 8;while (n != 0){m = n % 8;n = n / 8;push_seq(L, m);}print(L);}if (k == 16){int m = data % 16; char c;if (m >= 10){c = m - 10 + 'A';}push_seq(L, c);int n = data / 16;while (n != 0){m = n % 16;n = n / 16;if (m >= 10){c = m - 10 + 'A';}else{c = m + '0';}push_seq(L, c);}while (L->top != 0){printf("%c", pop_seq(L));}}
}

这篇关于数据结构头歌:2-1顺序栈-课上练(带超全注释+源代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797524

相关文章

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Python中的输入输出与注释教程

《Python中的输入输出与注释教程》:本文主要介绍Python中的输入输出与注释教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、print 输出功能1. 基础用法2. 多参数输出3. 格式化输出4. 换行控制二、input 输入功能1. 基础用法2. 类

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里