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;
}