#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct node
{
Elemtype data;
struct node* next;
}node;
typedef struct stack
{
struct node* top;//栈顶指针
struct node* bottom;//栈底指针
}stack;
void initstack(stack*);//栈的初始化
void pushstack(stack*,int);//入栈
bool popstack(stack*,int*);//出栈
//出栈的第二个参数可以要,可以不要,如果想查看出栈的元素的数据的话
//就可以用指针先修改它的值,之后在其他地方也是可以访问的
bool empty(stack* );//判断栈是否为空
int main(void)
{
stack s;
int N,r,val;
printf(“请输入你想转换的数\n”);
scanf_s("%d" , &N);
printf(“请输入你想转换尾多少进制的数\n”);
scanf_s("%d", &r);
initstack(&s);
while (N)
{
pushstack(&s, N % r);
N = N / r;
}
while (!empty(&s))//当栈不为空的时候才进行出栈
{
popstack(&s, &val);
printf("%d\t", val);
}
printf(“计算完毕\n”);
system(“pause”);
return 0;
}
void initstack(stackps)
{
ps->top = (node)malloc(sizeof(node));
if (!ps->top)
{
printf(“分配内存空间失败\n”);
exit(-1);
}
else
{
ps->bottom = ps->top;
ps->top->next = NULL;//一定要将ps的下一个节点
//也就是链表中的头节点的指针域指向尾空
//也可以这样写
//ps->bottom->next = NULL;
}
}
void pushstack(stackps,int val)
{
//由于入栈不需要判断栈满,所以不需要返回值进行标识
//先生成一个节点,再将数据域进行赋值,然后再进行指针的连接
//再将栈的栈顶指针指向这个新生成的节点
node p = (node*)malloc(sizeof(node));
if (!p)
{
printf(“分配内存空间失败\n”);
return;
}
else
{
p->data = val;
p->next = ps->top;
ps->top = p;
}
}
bool empty(stack* ps)
{
if (ps->bottom == ps->top)
{
return true;
}
else
{
return false;
}
}
bool popstack(stackps, intval)
{//将出栈元素的值保存在val这个变量中
if (!empty(ps))//这个地方就不用传入ps的地址了,因为ps本身就是一个指针
{
//如果栈不为空
node* p = ps->top;
*val = p->data;
ps->top = p->next;
free§;
p = NULL;
return true;
}
else
{
return false;
}
}
利用栈的知识将十进制的数转换为r进制的数 c语言 数据结构 超详细~~
最新推荐文章于 2024-05-01 15:49:33 发布