[数据结构]链栈的创建,入栈和出栈

2024-01-06 02:04

本文主要是介绍[数据结构]链栈的创建,入栈和出栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

栈是一种在栈顶压入和弹出的数据结构,所以只在一端进行操作.为了减小遍历开支,所以链栈一般在首元节点处进行插入(入栈).

#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node* next;}Node;
Node* pushStack(Node* , int); 
void print_Stack(Node* );
Node* popStack(Node* ptr,int* popvalue);
int main() 
{Node* ptr = NULL; int value = 0,popvalue=0;/*数据进行入栈*/for (int i = 0; i < 10; i++) {value = 10 * i + 10;ptr=pushStack(ptr, value);}print_Stack(ptr);    ptr=popStack(ptr,&popvalue);printf("popvalue=%d\n",popvalue);print_Stack(ptr);return 0;
}
/*执行压栈操作*/
Node* pushStack(Node* ptr, int pushvalue) 
{if (ptr == NULL){Node* newNode = (Node*)malloc(sizeof(Node));ptr = newNode; newNode->next = NULL; newNode->data = pushvalue;}else {Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = pushvalue;newNode->next = ptr;ptr = newNode;}return ptr;
}void print_Stack(Node* ptr)
{Node* str=ptr;while (str->next!=NULL) {printf("%d\n", str->data);str = str->next;}printf("%d\n", str->data);
}
/*执行出栈操作*/
Node* popStack(Node* ptr,int* popvalue)
{    Node* delete_ptr=NULL;*popvalue=ptr->data;delete_ptr=ptr;ptr=ptr->next;free(delete_ptr);delete_ptr=NULL;    return ptr;
}

 出栈返回栈顶数据代码:

#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node* next;
}Node;
Node* pushStack(Node* , int); void print_Stack(Node* );
int popStack(Node** ptr,int popvalue);int main() 
{Node* ptr = NULL; int value = 0,popvalue=0;/*数据进行入栈*/for (int i = 0; i < 10; i++) {value = 10 * i + 10;ptr=pushStack(ptr, value);}print_Stack(ptr);    popvalue=popStack(&ptr,popvalue);printf("popvalue=%d\n",popvalue);print_Stack(ptr);return 0;
}/*执行压栈操作*/
Node* pushStack(Node* ptr, int pushvalue) 
{if (ptr == NULL){Node* newNode = (Node*)malloc(sizeof(Node));ptr = newNode; newNode->next = NULL;newNode->data = pushvalue;}else {Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = pushvalue;newNode->next = ptr;ptr = newNode;}
return ptr;
}void print_Stack(Node* ptr)
{Node* str=ptr;while (str->next!=NULL) {printf("%d\n", str->data);str = str->next;}printf("%d\n", str->data);
}/*进行出栈操作*/
int popStack(Node** ptr,int popvalue)
{   Node* delete_ptr=NULL;popvalue=(*ptr)->data;delete_ptr=*ptr;*ptr=((*ptr)->next);free(delete_ptr);delete_ptr=NULL;    return popvalue;
}

修改为具有头指针的形式

这篇关于[数据结构]链栈的创建,入栈和出栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/574879

相关文章

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计