【C语言】使用结构体实现栈

本文介绍了如何使用C语言实现链表和栈数据结构,包括创建链表、栈,插入节点,删除节点,以及栈顶操作(入栈、出栈和检查是否为空)的函数实现。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <stdlib.h>


struct Node{
    int data;
    struct Node* next;
};


//表头法
struct stack{
    int stakeSize;
    struct Node* stackTop;//充当表头
};


//创建链表
struct Node* createList(){
    struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
    headNode->next = NULL;
    return headNode;
}
//创建栈
struct stack* createStake(){
    struct stack* mystake = (struct stack*)malloc(sizeof(struct stack));
    mystake->stakeSize = 0;
    mystake->stackTop = createList();
    return mystake;
}

//创建节点
struct Node* createNode(int mydata){//mydata是存入的数据
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = mydata;
    newNode->next = NULL;
    return newNode;
}

// 插入节点
void insertNodeByHead(struct Node* headNode,int data){
    struct Node* newNode = createNode(data);//创建节点
    newNode->next = headNode->next;//新节点指向头结点的下一节点
    headNode->next = newNode;//头节点的下一节点变为新节点
}

//打印
void printList(struct Node* headNode){
    struct Node* pMove = headNode->next;
    while (pMove)
    {
        printf("%d\t",pMove->data);
        pMove = pMove->next;
    }
    printf("\n");
    
}

// 入栈
void push(struct stack* mystack,int data){
    insertNodeByHead(mystack->stackTop,data);
    mystack->stakeSize ++;

}

//删除
void deleteNodeByHead(struct Node* headNode){
    struct Node* nextNode = headNode->next;
    headNode->next = nextNode->next;
    free(nextNode);
    nextNode = NULL;

}

int top(struct stack* mystack){
    if(mystack->stakeSize == 0){
        return -1;
    }else{ 
        return mystack->stackTop->next->data;}
   
}

//删除第一个
void pop(struct stack* mystack){
    if(mystack->stakeSize == 0){
        printf("staxk is NULL\n");
    }else{
        deleteNodeByHead(mystack->stackTop);
        mystack->stakeSize--;
    }
    
}
int empty(struct stack* mystack){
    if(mystack->stakeSize == 0){
        return 1;
    }else{
        return 0;
    }
}
int main(){
    //测试栈
    // struct Node* list = createList();//创建链表
    // insertNodeByHead(list,1);
    // insertNodeByHead(list,2);
    // printList(list);

    //测试栈
    struct stack* mystack = createStake();
    push(mystack,1);
    push(mystack,3);

    while (!empty(mystack))
    {
        printf("%d\t",top(mystack));
        pop(mystack);
    }
    
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值