栈的基本操作及实现

来源:互联网 发布:电气设计软件有哪些 编辑:程序博客网 时间:2024/06/10 16:04
#include <stdio.h>#include <stdbool.h>#include <stdlib.h>#include <iostream>typedef int ElementType;//定义结点typedef struct LinkNode{    ElementType data;    struct LinkNode* next;} *StackNode, *QueueNode;//定义栈typedef struct {    LinkNode *top;} LinkStack;//初始化栈LinkStack* InitStack(LinkStack *L){    printf("初始化栈\n");    L = (LinkStack*)malloc(sizeof(LinkStack));    L->top = (LinkNode*)malloc(sizeof(LinkNode));    L->top->next = NULL;    return L;}//判断栈是否为空bool isStackEmpty(LinkStack* L){    printf("判断栈是否为空\n");    if (L->top->next == NULL) return true;    else return false;}//入栈StackNode Push(LinkNode *head, ElementType data){    //首先判断栈是否已满,但这里是链栈,则不做是否已满的判断    //我们在这个子方法里面新建一个节点,判断这个节点是否能被分配空间    StackNode S = (StackNode)malloc(sizeof(LinkNode));    if (S == NULL){        printf("没有多余的空间可以分配\n");        exit(0);    }    S->data = data;    printf("S->data=%d, data=%d\n", S->data, data);    S->next = head->next;    head->next = S;    printf("head->next->data=%d\n", head->next->data);    return head;}//出栈,返回要出栈的元素ElementType Pop(LinkNode* head){    printf("进行一次pop,");    ElementType data;    //首先判断栈是否为空    if (head->next == NULL){        printf("栈为空,无法出栈\n");getchar();getchar();exit(0);    }    data = head->next->data;    LinkNode* node = head->next;    head->next = node->next;    free(node);    //printf("栈顶元素现在是:%d\n", head->next->data);    return data;}//返回栈顶元素ElementType GetTop(LinkNode* head){    if (head->next == NULL)        printf("栈为空,无法输出元素\n");    ElementType data = head->next->data;    printf("栈顶元素为:%d\n", data);}// int main(void)// {//     LinkStack* Stack;//     Stack = InitStack(Stack);//     if (isStackEmpty(Stack) == true){//         printf("栈为空,继续进行程序\n");//     }//     Stack->top = Push(Stack->top, 5);//     printf("Stack->top->data=%d\n", Stack->top->data);//     GetTop(Stack->top);//     //printf("%d ", Pop(Stack->top));//     Stack->top = Push(Stack->top, 3);//     GetTop(Stack->top);//     Stack->top = Push(Stack->top, 1);//     GetTop(Stack->top);//     Stack->top = Push(Stack->top, 7);//     GetTop(Stack->top);//     printf("出栈的元素是:%d\n", Pop(Stack->top));//     printf("出栈的元素是:%d\n", Pop(Stack->top));//     printf("出栈的元素是:%d\n", Pop(Stack->top));//     Stack->top = Push(Stack->top, 2);//     GetTop(Stack->top);//     getchar();//     getchar();//     return 0;// }
原创粉丝点击