栈实现(数据结构---数组,链表 C实现)

#include<stdio.h>
#include<stdlib.h>
//栈的数组实现


struct StackRecord
{
    int Capacity;
    int TopOfStack;
    int *Array;
};
typedef struct StackRecord *Stack;
Stack CreateStack(int Length)
{
    Stack S;
    S = (Stack)malloc(sizeof(struct StackRecord));
    S->Array = (int*)malloc(Length * sizeof(int));
    S->Capacity = Length;
    S->TopOfStack = -1;
    return S;
}

void DisposeStack(Stack S)
{

    if (S != NULL)
    {
        free(S->Array);
        free(S);
    }
}

int IsEmpty(Stack S)
{
    return S->TopOfStack == -1;
}

int IsFull(Stack S)
{
    return S->Capacity == (S->TopOfStack+1);
}

void MakeEmpty(Stack S)
{
    S->TopOfStack = -1;
}

void Push(int x, Stack S)
{
    if (IsFull(S))
    {
        printf("Full Stack\n");
        return;
    }
    else
        S->Array[++  S->TopOfStack] = x;
}

int Top(Stack S)
{
    if (!IsEmpty(S))
        return (S->Array[S->TopOfStack]);
    printf("Empty Stack\n"); return 0;
}

int Pop(Stack S)
{
    if (IsEmpty(S))
    {
        printf("Empty Stack\n");
        return ;
    }
    else
        return(S->Array[S->TopOfStack--]);
}

int TopAndPop(Stack S)
{
    if (!IsEmpty)
        return(S->Array[S->TopOfStack--]);
    printf("Empty Stcak\n");
    return 0;
}
#include<stdio.h>
#include<stdlib.h>

//链表实现,元素默认的字符~~~
struct Node
{
    double a;
    struct Node *next;
};
typedef struct Node *Stack;
Stack CreakStack()
{
    Stack S;
    S = (Stack)malloc(sizeof(Node));
    S->next = NULL;
    return S;
}


void Push(char c, Stack S)
{
    Stack tmp;
    tmp = (Stack)malloc(sizeof(Node));
    tmp->a = c;
    tmp->next = S->next;
    S->next = tmp;
}


void Pop(Stack S)
{
    Stack tmp;
    tmp = S->next;
    S->next = tmp->next;
    free(tmp);
}


char Top(Stack S)
{
    return(S->next->a);
}


bool Isempty(Stack S)
{
    return S->next == NULL;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值