#include <stdio.h>
#include <stdlib.h>
/* 栈的创建及其应用 */
typedef struct Node{
int data;
struct Node *next;
}Node, *Pnode;
typedef struct Stack{
Pnode top;
Pnode base;
}Stack, *Pstack;
//创建一个空栈
Pstack createStack(){
Pnode pnode = (Pnode)malloc(sizeof(Node));
pnode->next = NULL;
Pstack pstack = (Pstack)malloc(sizeof(Stack));
pstack->top = pnode;
pstack->base = pnode;
return pstack;
}
//入栈
Pstack push(Pstack pstack, int data){
Pnode pnode = (Pnode)malloc(sizeof(Node));
pnode->data = data;
pnode->next = pstack->top;
pstack->top = pnode;
return pstack;
}
//出栈
int pop(Pstack pstack){
if(pstack->base == pstack->top){
printf("栈为空!\n");
return 0;
}
Pnode p = pstack->top;
pstack->top = p->next;
int data = p->data;
free(p);
return data;
}
//获取栈顶元素
int getTop(Pstack pstack){
if(pstack->base == pstack->top){
printf("栈为空!\n");
return 0;
}
return pstack->top->data;
}
int isStackEmpty(Pstack pstack){
if(pstack->base == pstack->top)
return 1;
return 0;
}
//利用栈进行进制转化,把非负十进制转化为任意进制
void conversion(){
int n;
int d;
printf("输入要转化的十进制数和要转化的进制:");
scanf("%d %d",&n,&d);
Pstack pstack = createStack();
int temp;
while(n){
push(pstack,n%d);
n = n/d;
}
printf("转化为%d进制为:");
while(!isStackEmpty(pstack)){
printf("%d",pop(pstack));
}
printf("\n");
}
int main(int argc, char *argv[]) {
/*
Pstack pstack = createStack();
pstack = push(pstack,1);
pstack = push(pstack,2);
printf("%d\n",getTop(pstack));
printf("%d\n",pop(pstack));
printf("%d\n",pop(pstack));
printf("%d\n",pop(pstack));
*/
conversion();
return 0;
}
C语言实现栈(栈的链式实现)
最新推荐文章于 2024-06-05 16:55:53 发布