栈的进制转换

该代码示例展示了如何使用C语言创建并操作链栈,包括创建头结点、入栈、出栈、遍历和释放栈空间的功能。主要应用于二进制转换等数据处理场景。
摘要由CSDN通过智能技术生成

head.h

#ifndef __HAED_H__
#define __HAED_H__

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
typedef int  datatype;
typedef struct Node
{
	union
	{
		int top;
		int len;
		datatype data;
	};
	struct Node *next;
}*seqstack;

seqstack create_head();
seqstack create_node();
int seqstack_push(seqstack top,datatype e);
int seqstack_pop(seqstack top);
void seqstack_output(seqstack top);
seqstack seqstack_free(seqstack top);
#endif

main.c

#include "head.h"
int main(int argc, const char *argv[])
{
	seqstack p=create_head();

	datatype e;
	printf("请输入要转换的数:");
	scanf("%d",&e);
	while(e>0)
	{
		int n =e%2;
		seqstack_push(p,n);
		e/=2;
	}
	while(p->top!= -1)
	{
	seqstack_pop(p);
	}
	p=seqstack_free(p);
	
	return 0;
}

test.c

#include "head.h"
int main(int argc, const char *argv[])
{
	seqstack p=create_head();

	datatype e;
	printf("请输入要转换的数:");
	scanf("%d",&e);
	while(e>0)
	{
		int n =e%2;
		seqstack_push(p,n);
		e/=2;
	}
	while(p->top!= -1)
	{
	seqstack_pop(p);
	}
	p=seqstack_free(p);
	
	return 0;
}
ubuntu@ubuntu:8$ cat test.c 
#include "head.h"

/*
 * function:    创建链栈头结点
 * @param [ in] 无参数
 * @param [out] 
 * @return      成功返回地址 失败返回NULL
 */
seqstack create_head()
{
	seqstack top=(seqstack)malloc(sizeof(struct Node));
	if(top==NULL)
		return NULL;
	top->len=0;
	top->next=NULL;
	return top;
}

/*
 * function:    创建结点
 * @param [ in] 无参数 
 * @param [out] 
 * @return      成功返回地址 失败返回NULL 
 */
seqstack create_node()
{
	seqstack p=(seqstack)malloc(sizeof(struct Node));
	if(p==NULL)
		return NULL;
	p->data=0;
	p->next=NULL;
	return p;
}

/*
 * function:    入栈
 * @param [ in] 栈 插入的值
 * @param [out] 
 * @return      成功返回0 失败返回-1
 */
int seqstack_push(seqstack top,datatype e)
{
	//判断栈是否存在
	if(top=NULL)
	{
		printf("入栈失败\n");
		return -1;
	}
	//插入新节点
	seqstack s=create_node();
	if(s==NULL)
		return -1;
	s->data=e;
	s->next=top->next;
	top->next=s;
	top->len++;
	return 0;
}

/*
 * function:    出栈
 * @param [ in] 链栈
 * @param [out] 
 * @return      成功返回0 失败返回-1
 */
int seqstack_pop(seqstack top)
{
	//判断栈是否存在
	//判断栈是否为空
	if(top==NULL||top->len==0)
	{
		printf("删除失败\n");
		return -1;
	}
	//删除 
	seqstack q=top->next;
	printf("出栈的元素是:%d\n",q->data);
	top->next=q->next;
	q=NULL;
	top->len--;
	return 0;
}

/*
 * function:    链栈遍历
 * @param [ in] 链栈 
 * @param [out] 
 * @return      无返回值函数
 */
void seqstack_output(seqstack top)
{
	puts("");
	seqstack p=top;
	while(p->next!=NULL)
	{
		p=p->next;
		printf("%d\t",p->data);
	}
	puts("");
}

/*
 * function:    栈空间释放
 * @param [ in] 链栈 
 * @param [out] 
 * @return      返回NULL
 */
seqstack seqstack_free(seqstack top)
{
	if(top==NULL)
		return NULL;
	int n=top->len;
	for(int i=0;i<n;i++)
	{
		seqstack_pop(top);
	}
	free(top);
	top=NULL;
	return top;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值