栈的链式表示和实现(C语言)

#include <stdio.h>
#include <stdlib.h>

const int MAXSIZE = 100;
#define OK 1;
#define ERROR 0;
#define OVERFLOW 0;
#define TURE 1;
#define FALSE 0;


typedef int Status;
typedef char SElemType;  //栈型数据 
//链栈定义
typedef struct StackNode {
    SElemType data;  //数据域
    struct StackNode *next;  //指针域
}StackNode,*LinkStack;

/**
* 链栈结构:stack1(栈顶)->node2->node3->...->nodeN(栈底)
**/


//链栈初始化
Status InitStack(LinkStack *stack){
    //构造一个空栈,栈顶指针置为空
    *stack=NULL;
    return OK;
}

//判断链栈是否为空
Status StackIsEmpty(LinkStack stack){
    if(stack==NULL){
        return TURE;
    } else {
        return FALSE;
    }
}

//元素进入链栈 
Status Push(LinkStack *stack,SElemType elem){
    StackNode *newNode;  //定义指向新结点指针
    newNode=(StackNode*)malloc(sizeof(StackNode));  //新节点分配空间
    newNode->data=elem;  //新结点数据域赋值
    newNode->next=(*stack);  //新结点指针域指向原栈顶
    (*stack)=newNode;  //更新栈顶
    return OK;
}

//顺序栈的出栈操作
Status Pop(LinkStack *stack,SElemType *elem){
    StackNode *waitDeleted;  //定义指向待出栈结点指针
    waitDeleted=(*stack);  //栈顶结点
    *elem=waitDeleted->data;  //elem存放出栈元素值
    (*stack)=(*stack)->next;  //更新栈顶指针
    free(waitDeleted);  //释放已出栈的结点空间
    return OK;
}

//取栈顶元素
SElemType GetTop(LinkStack stack){
    if(stack!=NULL){
        return stack->data;
    } else {
        SElemType null;
        return null;
    }
}


int main(void){
    LinkStack stack1;  //用指针stack1表示一个链栈
    
    //初始化 
    Status initStackResult = InitStack(&stack1);
    printf("栈stack1初始化结果码:%d\n",initStackResult);
    
    //是否为空
    Status stackIsEmpty = StackIsEmpty(stack1);
    printf("栈stack1为空?:%d\n",stackIsEmpty);
    
    //元素入栈
    SElemType elem1='Y',elem2='C';
    Status pushResult = Push(&stack1,elem1);
    printf("入栈执行结果:%d\n",pushResult);
    Push(&stack1,elem2); //将elem2也入栈
    printf("栈顶元素值:%c\n",(*stack1).data);//元素出栈
    SElemType elem3;  //下面取出的数据放入elem3
    Status popResult = Pop(&stack1,&elem3);
    printf("出栈执行结果:%d\n",popResult);
    printf("出栈元素值:%c\n",elem3);
    printf("栈顶元素值:%c\n",(*stack1).data);
    
    //取栈顶元素
    SElemType stackTopValue=GetTop(stack1);
    printf("获取栈顶元素值为:%c\n",stackTopValue);
    
    printf("\nEND");
    return 0;
}

posted @ 2021-03-28 10:32  杨小雨  阅读(444)  评论(0)    收藏  举报