栈的实现(C版)

一.栈的定义:

        栈是只能在表的一端进行删除和插入操作的线性表,运行删除和插入操作的一端成为栈顶,另一端为栈底。满足后进先出的特性。

二.栈的顺序存储实现:

//定义顺序栈结构
#define StackSize 100
typedef int DataType;
typedef struct {
    DataType data[StackSize];
    int top;
}SeqStack;

//初始化
void initStack(SeqStack *s){
    s->top=-1;
}

//入栈
void push(SeqStack *s,DataType x){

    if(s->top==StackSize-1) {
        throw "下溢异常";
    }
    s->top++;
    s->data[s->top]=x;
}
//出栈
DataType pop(SeqStack *s){
    if(s->top==-1){
        throw "下溢异常"; 
    }
    return s->data[s->top--];  
}

//取栈顶元素
DataType top(SeqStack *s){
    if(s->top==-1){
        throw "下溢异常";   
    }
    return s->data[s->top];
}
//判空操作
int empty(SeqStack *s){
    if(s->top==-1) return 1;
    else return 0;
}

三.栈的链接存储结构定义:

//定义链栈结构
typedef int DataType;
typedef struct Node{
    DataType data;
    Node *next;
}Node;

//初始化
void initStack(Node *top){
    top=NULL;
}
//入栈
void push(Node *top,DataType x){
    Node* s=(Node*)malloc(sizeof(Node));
    s->data=x;
    s->next=top;
    top=s;
}
//出栈
DataType pop(Node *top){
    if(top==NULL){
     throw "下溢异常";
    }
    DataType x=top->data;
    top=top->next;  
    return x;               
}

//取栈顶元素
DataType top(Node *top){
    if(top==NULL){
        throw "下溢异常";
    }
    return top->data;
}
//判空
int empty(Node *top){
    if(top==NULL) return 1;
    else return 0;  
}
//销毁栈
void destroyStack(Node *top){
    Node *p=top;
    while(top!=NULL){
        free(p);
        top=top->next;   
        p=top;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值