head.h
#ifndef __HEAD_H_
#define __HEAD_H_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
typedef int datatype;
typedef struct node
{
union
{
int len;
datatype data;
};
struct node *next;
}*linkstack;
linkstack create_head();
linkstack create_node();
int linkstack_head(linkstack l,datatype e);
int delete_head(linkstack l);
void output(linkstack l);
linkstack free_sapce(linkstack l);
main.c
#include "head.h"
int main(int argc, const char *argv[])
{
/* linkstack l=create_head();
char choice[10];
datatype e;
while(1)
{
printf("请输入要入栈的数据:");
scanf("%d",&e);
printf("是否继续?yes/no:");
linkstack_head(l,e);
scanf("%s",choice);
if(strcmp(choice,"no")==0)
{
break;
}
}
output(l);
delete_head(l);
// output(l);
// free_sapce(l);*/
int num=0;
int n=0;
linkstack p=create_head();
printf("请输入要转换的十进制数:");
scanf("%d",&num);
printf("请输入要转换的进制:");
scanf("%d",&n);
while(num)
{
linkstack_head(p,num%n);
num=num/n;
}
output(p);
puts("");
free_sapce(p);
return 0;
test.c
#include "head.h"
/*
* function: 在堆区申请空间
* @param [ in]
* @param [out]
* @return 成功返回地址,失败返回NULL
*/
linkstack create_head()
{
linkstack l=(linkstack)malloc(sizeof(struct node));
if(l==NULL)
return NULL;
l->len=0;
l->next=NULL;
return l;
}
/*
* function: 创建普通节点
* @param [ in]
* @param [out]
* @return 成功返回地址,失败返回NULL
*
*/
linkstack create_node()
{
linkstack p=(linkstack)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 linkstack_head(linkstack l,datatype e)
{
if(l==NULL)
{
printf("插入失败\n");
return -1;
}
linkstack s=create_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 成功返回0,失败返回-1
*/
int delete_head(linkstack l)
{
if(l==NULL||l->len==0)
{
printf("删除失败\n");
return -1;
}
linkstack 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 无返回值
*/
void output(linkstack l)
{
puts("");
linkstack p=l;
while(p->next)
{
p=p->next;
printf("%d",p->data);
}
puts("");
}
/*
* function: 空间释放
* @param [ in] 链栈
* @param [out]
* @return 成功返回地址
*/
linkstack free_sapce(linkstack l)
{
if(l==NULL)
return NULL;
int n=l->len;
for(int i=0;i<n;i++)
{
delete_head(l);
}
free(l);
l=NULL;
return l;
}