C语言实现栈(栈的链式实现)

来源:互联网 发布:词典软件 推荐 编辑:程序博客网 时间:2024/05/22 13:42
#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;}
原创粉丝点击