链栈实现进制转换

head.h

#ifndef __HEAD_H_
#define __HEAD_H_
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef int datatype;
typedef struct Node
{
  union{
  int len;
  datatype data;
  };
  struct Node *next;
 }*looklink;
looklink creat_head();
looklink creat_node();
int looklink_push(looklink l,datatype e);
void output(looklink l);
int looklink_pop(looklink l);
looklink looklink_free(looklink l);


#endif

main.c

#include "head.h"	
int main (int argc, const char *argv[])
{
	looklink l=creat_head();
  int sum;
  datatype e;
  printf("请输入你要转换的数");
    scanf("%d",&sum);
     while(sum>0)
	{
	 e=sum%2;
	 looklink_push(l,e);
	sum/=2;
	}
	 output(l);
	 
	 l=looklink_free(l);
	return 0;
}

texh.c

#include"head.h"
/*
 * function:    申请空间
 * @param [ in] 无
 * @param [out] 
 * @return      
 */
looklink creat_head()
{
 looklink l=(looklink)malloc(sizeof(struct Node));
 if (l==NULL)
	 return NULL;
 l->len=0;
 l->next=NULL;
 return l;
}
/*
 * function:    普通结点
 * @param [ in] 
 * @param [out] 
 * @return      
 */
looklink creat_node()
{
 looklink p=(looklink)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 looklink_push(looklink l,datatype e)
{
if(l==NULL)
  {
  printf("入栈失败\n");
  return -1;
  }
   looklink s=creat_node();
	   if(s==NULL)
		   return-1;
  s->data=e;
  s->next=l->next;
  l->next=s;
  l->len++;
  return 0;
}
/*
 * function:    遍历
 * @param [ in] 
 * @param [out] 
 * @return      无
 */
void output(looklink l)
{
  puts("");
   looklink p=l;
   while(p->next!=NULL)
   {
   p=p->next;
   printf("%d\t",p->data);
   }
  puts("");
}
/*
 * function:    出栈
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int looklink_pop(looklink l)
{
  if(l==NULL||l->len==0)
  {
  printf("删除失败\n");
    return -1;
  }
  looklink q=l->next;
  printf("出栈的元素 %d\n",q->data);
     l->next=q->next;
	 free(q);
	 q=NULL;
	 l->len--;
	 return 0;
}
/*
 * function:    释放
 * @param [ in] 
 * @param [out] 
 * @return      
 */
looklink looklink_free(looklink l)
{
if(l==NULL)
 return NULL;
 int n=l->len;
 for(int i=0;i<n;i++)
 {
    looklink_pop(l);
 }
free(l);
l=NULL;
return l;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值