链式栈的基本 *** 作

链式栈的基本 *** 作,第1张

链式栈的基本 *** 作 相关代码:

#include"stdio.h"
#include"stdlib.h"

//定义一个链栈的结构体 
//这个链式表有点特殊,它的最大长度是无限大 
typedef struct stack {
    int data;
    struct stack *next;
}Stack;

//定义一个判断栈是否为空的方法
int IsEmpty(Stack *top){
    if(top->next==NULL){
        return 1;
    }
    else{
        return 0;
    }

//定义一个初始化链栈的方法
void Init(Stack *top){
    top=(Stack*)malloc(sizeof(stack));   //定义一个带有头指针top的空栈 
    top->next=NULL;

//定义一个进栈的方法 
void Push(Stack *top,int x){
    //定义一个新的节点
    Stack *s=(Stack *)malloc(sizeof(stack)); 
    //先给新的节点赋值,然后再赋地址 
    s->data=x;
    //给新的节点赋地址,这里运用到了头插法,但是我感觉这种写法不是特别的好,不符合栈的特性,没有把top看成节点。 
    s->next = top->next;   //第一个节点放入到栈底 
     top->next=s;
     printf("进栈成功!n");

//定义一个出栈的方法
void Pop(Stack *top){
    Stack *s;   //表示的是辅助指针 
    s=(Stack *)malloc(sizeof(Stack)); 
    if(IsEmpty(top)==1){
        printf("栈中没有元素,无法进行出栈 *** 作!n");
    }
    else{
        s=top->next;
        top->next = s->next;  //删除s节点
        free(s);   //清除s节点的内存 
        printf("出栈成功");
    }

//定义一个取出栈顶元素的方法
void GetTop(Stack *top){
    if(IsEmpty(top)==1){
        printf("栈中没有元素,无法进行取出栈顶元素 *** 作!n");    
    }
    else{
        printf("栈顶元素为:%dn",top->next->data);
    }

//定义一个输出链式栈中所有元素的方法。 
void show(Stack *top){
    Stack *p=top->next;
    while(p){
        printf("%d-",p->data);
        p=p->next;
    }

int main(){
    Stack top;  //定义一个带有top头结点的空栈 
    Init(&top);        //将其初始化 
    //进行进栈 *** 作
    Push(&top,0);
    Push(&top,1);
    Push(&top,2);
    GetTop(&top);
    show(&top);
     
}

相关结果:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3970253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存