详解c/c++链式堆栈描述进制转换问题示例

目录
  • 创建栈结构
  • 代码实现

基础操作需要创建链表来存储数据

使用尾插法和尾删法来表示栈中的入栈和出栈

typedef struct node
{
	int data;
	struct node* next;
}Node,*LPNode;
LPNode creatnode(int data)
{
	LPNode newnode = (LPNode)malloc(sizeof(Node));
	assert(newnode);
	newnode->data = data;
	newnode->next = NULL;
	return newnode;
}
void insertbytail(LPNode &head,int data)
//这里要么传引用要么传二级指针因为这里head赋值并没有对主函数里面的head改变
{
	if (head == NULL)
	{
		head = creatnode(data);
	}
	else
	{
		LPNode newnode = creatnode(data);
		LPNode pmove = head;
		while (pmove->next!=NULL)
		{
			pmove = pmove->next;
		}
		pmove->next = newnode;
	}
}
void deletetail(LPNode head)
{
	LPNode pronode = head;
	if (head == NULL)
	{
		return;
	}
	LPNode posnode = head->next;

	if (pronode->next == NULL)
	{
		cout << pronode->data;
		free(pronode);
		return;
	}
	while (posnode->next!= NULL)
	{
		pronode = posnode;
		posnode = posnode->next;
	}
	cout << posnode->data ;
	free(posnode);
	pronode->next = NULL;
}

创建栈结构

typedef struct stack
{
	int top;//用来判断是否为空
	LPNode head;
}Stack,*LPStack;
//描述一个栈的最初始的状态
LPStack creatstack()
{
	LPStack stack = (LPStack)malloc(sizeof(Stack));
	assert(stack);
	stack->top = 0;
	stack->head = NULL;
	return stack;
}

出栈入栈就是表现为链式结构的表尾插入和删除

void push(LPStack stack,int data)
{
	insertbytail(stack->head, data);
	stack->top++;
}
void pop(LPStack stack)
{
	deletetail(stack->head);
	stack->top--;
}

判断栈是否为空即判断 top==0

bool empty(LPStack stack)
{
	return stack->top == 0;
}

代码实现

int main()
{
	LPNode head = NULL;
	LPStack stack = creatstack();
	int n;
	int num;
	cin >> num;//表示数
	cin >> n;//表示进制
	while (num)
	{
		push(stack,num%n );
		num /= n;
	}
	while (!empty(stack))
	{
		pop(stack);
	}

	return 0;
}

以上就是c/c++链式堆栈描述进制转换问题示例解析的详细内容,更多关于c/c++链式堆栈描述进制转换的资料请关注我们其它相关文章!

(0)

相关推荐

  • c++中堆栈及创建对象示例代码

    简介 栈(stack),先进后出,位于一级缓存中,操作系统自动分配释放 ,存放函数的参数值,局部变量的值等,被调用时处于存储空间中,调用完毕立即释放. 堆(heap),堆包含一个链表来维护已用和空闲的不连续的内存块,存放在二级缓存中,一般由程序员分配释放. 快速记忆方式: 一级缓存比二级缓存快,栈是一个先进后出列表,存取非常快,所以栈是在一级缓存中. 栈中不能随机取数据,只能取最上面的一个,存放的内容必然要有严格的存取顺序,所以适合函数调用时的形参.局部变量. 栈空间有限,一般PC一级缓存就几M

  • 深入浅析C语言中堆栈和队列

    1.堆和栈 (1)数据结构的堆和栈 堆栈是两种数据结构. 栈(栈像装数据的桶或箱子):是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取.这就如同要取出放在箱子里面底下的东西(放入的比较早的物体),首先要移开压在它上面的物体(放入的比较晚的物体). 堆(堆像一棵倒过来的树):是一种经过排序的树形数据结构,每个结点都有一个值.通常所说的堆的数据结构,是指二叉堆.堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆.由于堆的这个特性,常用来实现优先队列,堆的存取是随意,

  • 关于C++读入数字按位取出与进制转换问题(典型问题)

    这一片博客我就不写具体的一个题了,只是总结一种典型问题--读入数字按位取出. 就拿数字12345举例吧. 是首先,我们要取出个位.这样取出: 12345/1=12345 12345%10=5. //为了好发现规律 这样我们就有了它的个位.十位是这样: 12345/10=1234 1234%10=4. 同理,百位: 12345/100=123 123%10=3. 于是可以发现,取出哪一位,就是要先将原数除以这一位的位名,再模10. 程序: #include<iostream> #include&

  • C++基于栈实现铁轨问题

    本文实例讲述了C++基于栈实现铁轨问题.分享给大家供大家参考.具体分析如下: 示例图如下所示: 经典栈问题!第一次做的时候思路太混乱了,现在看了刘汝佳的书,重新整理下. #include <stdio.h> #include <string.h> /****************************************************************** * 用数组A存储调整前的车厢号序列,用数组B存储调整好的车厢号序列 * 用栈stack存储存放在中转站

  • 详解c/c++链式堆栈描述进制转换问题示例

    目录 创建栈结构 代码实现 基础操作需要创建链表来存储数据 使用尾插法和尾删法来表示栈中的入栈和出栈 typedef struct node { int data; struct node* next; }Node,*LPNode; LPNode creatnode(int data) { LPNode newnode = (LPNode)malloc(sizeof(Node)); assert(newnode); newnode->data = data; newnode->next = N

  • 详解IDEA中Debug的使用和进制转换问题

    1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 如何加断点 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可 如何运行加了断点的程序 在代码区域右键Debug执行 看哪里 看Debugger窗口 看Console窗口 点哪里 点Step Into (F7)这个箭头,也可以直接按F7 如何删除断点 选择要删除的断点,单击鼠标左键即可 如果是多个断点,可以每

  • 实例详解jQuery的链式编程风格

    链式编程的实现原理 jQuery可以让我们开发者一直使用点语法调用自身方法的原理,主要原因是jQuery内部利用了js的对象来实现. 在jQuery中,如果一直对同一个元素或元素的其他关系元素(兄弟元素,父子元素)进行操作,那么可以使用 .语法(点语法),一直写下去. $("#box").css("background", "pink").css("font-size":"29px"); $("#

  • 详解c# 委托链

    引言: 上一专题介绍了下编译器是如何来翻译委托的,从中间语言的角度去看委托,希望可以帮助大家进一步的理解委托,然而之前的介绍都是委托只是封装一个方法,那委托能不能封装多个方法呢?因为生活中经常会听到,我代表大家的意见等这样的说话,既然委托也是一个代表,那他如果只能代表一个人,那他的魅力就不是很大了吧,所以我们就会委托能不能代表多个方法的? 答案是可以的,这就是本专题要讲的内容--委托链,委托链也是一个委托,只是因为它是把多个委托链在一起,所以我们就以委托链来这么称呼它的. 一.到底什么是委托链

  • 详解Nginx防盗链和Nginx访问控制与Nginx解析php的配置

    详解Nginx防盗链和Nginx访问控制与Nginx解析php的配置 Nginx防盗链 配置如下,可以和上面的配置结合起来 location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ { expires 7d; valid_referers none blocked server_names *.test.com ; if ($invalid_referer) { return 403; } access

  • 详解PowerDesigner之CDM、PDM、SQL之间转换

    详解PowerDesigner之CDM.PDM.SQL之间转换 前段时间用了下PowerDesigner做了一些辅助工作.在此特地小结一下: 有关CDM.PDM.SQL之间转换以及不同数据库之间库表Sql的移植,首先要了解的是它们各自的用途.这里就简单的描述一下,不做详细的解释了. CDM:概念数据模型.CDM就是以其自身方式来描述E-R图.它不考虑物理实现的细节,只表示数据库的整体逻辑结构,独立于任何软件和数据存储结构. PDM:物理数据模型.考虑了数据库的物理实现,包括软件和数据存储结构,即

  • java 进制转换实例详解

    java 进制转换实例详解 十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinaryString(int i) 十六进制转成十进制 Integer.valueOf("FFFF",16).toString() 八进制转成十进制 Integer.valueOf("876",8).toString() 二进制转十进制 Integ

  • C语言实现进制转换函数的实例详解

    C语言实现进制转换函数的实例详解 前言: 写一个二进制,八进制,十六进制转换为十进制的函数 要求: 函数有两个参数,参数(1)是要转换为十进制的进制数,参数(2)是标示参数(1)是什么进制(2,8,16标示二进制,八进制,十六进制). 要有报错信息,比如参数是1012,但参数(2)是2,显然是进制数表示有错误. 系统表 pg_proc 存储关于函数的信息 内部函数在编译之前需要先定义在 pg_proc.h 中,src/include/catalog/pg_proc.h CATALOG(pg_pr

  • 详解 Java中日期数据类型的处理之格式转换的实例

    详解 Java中日期数据类型的处理之格式转换的实例 概要: 日期以及时间格式处理,在Java中时间格式一般会涉及到的数据类型包括Calendar类和Date类. Date类: 1.Date类型转String类型(以时间格式1970-01-01 01:01:01为例) //yyyy-MM-dd HH:mm:ss表示24时间进制 SimpleDateFormat sDateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String

  • 详解Java中String JSONObject JSONArray List<实体类>转换

    JSON使用阿里的fastJson为依赖包 gradle依赖管理如下: compile group: 'com.alibaba', name: 'fastjson', version:'1.2.41' 1.String转JSONObject 前言:String 是JSONObject格式的字符串 eg: JSONObject jSONObject = JSONObject.parseObject(String); 2.String转JSONArray 前言:String 是JSONArray格式

随机推荐