c语言栈的链表实现

#include <stdio.h>
#include <stdlib.h>
#include"PublicDS.h"
typedef int ElemType;

//定义栈节点的结构
typedef struct StackNode{
    ElemType data;
    struct StackNode* next;
}StackNode;
//定义栈的结构
typedef struct Stack{
    StackNode* top;
    int count;
}Stack;

/*
* 初始化一个空栈
*/
void InitStack(Stack* &s);
/*
* 销毁栈
*/
void DestroyStack(Stack* &s);
/*
* 清空栈
*/
void ClearStack(Stack* s);
/*
* 判断栈是否为空
*/
bool StackEmpty(Stack s);
/*
* 获取栈的长度
*/
int StackLength(Stack s);
/*
* 获取栈顶元素
*/
void GetTop(Stack s, ElemType* e);
/*
* 将元素压入栈
*/
void Push(Stack* &s, ElemType e);
/*
* 将元素弹出栈
*/
void Pop(Stack* &s, ElemType* e);
/*
* 打印栈
*/
void PrintStack(Stack* s,FILE* fout);

void InitStack(Stack* &s)
{
    MALLOC(s, sizeof(Stack), Stack*);
    s->top = NULL;
    s->count = 0;
}

void DestroyStack(Stack* &s)
{
    StackNode* sn_tmp_ptr;
    while (s->top){
        sn_tmp_ptr = s->top;
        s->top = s->top->next;
        free(sn_tmp_ptr);
    }
    free(s);

}

void ClearStack(Stack* &s)
{
    while (s->top){
        s->top->data = 0;
        s->top = s->top->next;
    }
}

bool StackEmpty(Stack s)
{
    return s.count<1 ;
}

int StackLength(Stack s)
{
    return s.count;
}

void GetTop(Stack s, ElemType* e)
{
    *e = s.top->data;
}

void Push(Stack* &s, ElemType e)
{
    StackNode* snptr;
    MALLOC(snptr, sizeof(StackNode), StackNode*);
    snptr->data = e;
    snptr->next = s->top;
    s->top = snptr;
    s->count++;

}

void Pop(Stack* &s, ElemType* e)
{
    *e = s->top->data;
    StackNode* sn_tmp_ptr = s->top;
    s->top = s->top->next;
    s->count--;
    free(sn_tmp_ptr);
}

void PrintStack(Stack* s,FILE *fout)
{
    while (s->top){
        fprintf(fout,"%d", s->top->data);
        s->top = s->top->next;
    }
}
void main(){
    FILE *fin, *fout;
    fin = fopen("input.txt", "r");
    fout = fopen("output.txt", "w");
    int tmp = 0;
    while (!feof(fin)){
        fscanf(fin, "%d", &tmp);
        if (tmp != -1){
            fprintf(fout, "%8d--->", tmp);
            Stack *sc = NULL;
            InitStack(sc);
            while (tmp / 2 != 0)
            {
                Push(sc, tmp % 2);
                tmp /= 2;
            }
            Push(sc, tmp);
            PrintStack(sc, fout);
            fprintf(fout, "
");
            DestroyStack(sc);
        }
    }
    fclose(fin);
    fclose(fout);
    system("pause");
}
原文地址:https://www.cnblogs.com/vinozly/p/4907094.html