#include <stdio.h>
#include <stdlib.h>
typedef struct node * Elem;
struct node{
int data;
Elem next;
};
typedef Elem Stack;
void initial(Stack* stack){
Elem p = (Elem)malloc(sizeof(Elem));
p->next = NULL;
*stack = p;
}
int getTop(Stack stack){
Elem p = stack->next;
if(p != NULL){
return p->data;
}else{
return NULL;
}
}
int pop(Stack stack ){
Elem p = stack->next;
if(p != NULL){
int data = p->data;
stack->next = p->next;
// free(p);
return data;
}else{
return NULL;
}
}
void push(Stack stack , int data){
Elem p = (Elem)malloc(sizeof(Elem));
p->data=data;
p->next = stack->next;
stack->next=p;
}
int getLength(Stack stack){
Elem p = stack;
int i = 0;
while(p->next!=NULL){
p=p->next;
i++;
}
return i;
}
void iteratorElem(Stack stack){
Elem p = stack->next;
printf("\n===============================================\n");
int i = 1;
while(p!= NULL){
printf("%d----->%d \t",i,p->data);
p=p->next;
i++;
}
printf("\n===============================================\n");
}
void main(){
Stack stack=NULL;
initial(&stack);
int num = 0;
for(int i =0;i<8;i++){
scanf("%d",&num);
push(stack,num);
}
iteratorElem(stack);
printf("Stack top elem: %d\n",getTop(stack));
printf("Stack elem length: %d\n",getLength(stack));
for(i =0;i<8;i++){
pop(stack);
iteratorElem(stack);
}
}
分享到:
相关推荐
栈的实现(C语言)数组实现以及链表实现源码,以及各个功能测试代码函数等 和后缀式转前缀式的用例
用函数或过程的方法设计、实现一个抽象数据类型栈或队列,包括栈或队列的基本运算操作,使得以后对栈或队列中的数据的访问,可以通过调用函数或过程来完成。
通过阅读和理解提供的压缩包文件"stack",我们可以预期其中包含的源代码展示了如何用C语言分别使用数组和链表实现栈的全部功能。这些源码可以作为学习和理解栈实现的实例,帮助我们更好地掌握这两种数据结构在实际...
在链表实现中,`Push`操作需要创建新的节点,设置其数据值,并将其链接到当前栈顶。`Pop`操作则需删除栈顶节点,通常通过保存栈顶节点的前一个节点来实现,这样可以避免直接删除栈顶元素导致栈顶指针丢失。`Peek`、`...
"c++算法集-排序-链表-图-队列-二叉树实现"这个压缩包包含了C++语言实现的一些核心数据结构和算法,这些都是计算机科学的基础。 首先,我们来详细探讨排序算法。排序是计算机科学中最基本的操作之一,它涉及将一组...
在C语言中,我们可以通过链表来实现栈的功能,这就是所谓的“栈链表”。在这个主题下,我们将深入探讨栈链表的概念、设计以及在C语言中的实现。 栈链表的核心是链表节点,每个节点包含一个数据元素和指向下一个节点...
这里可能包括单链表、双向链表、循环链表等不同类型的链表实现,以及链表的基本操作,如插入、删除、查找等。链表的理解和操作是数据结构学习的基础。 接着是"二叉树"。二叉树是最简单但又非常重要的非线性数据结构...
在"delimetermach.cpp"这个源代码文件中,很可能包含了具体的链表实现栈和队列的C++代码。通过阅读和分析这段代码,我们可以深入理解如何使用C++的指针和结构体来构建链表节点,以及如何通过指针操作来实现栈的压栈...
以下是一个简单的C语言栈链表实现: ```c #include #include typedef struct Node { int data; struct Node* next; } Node; Node* CreateStack() { Node* head = (Node*)malloc(sizeof(Node)); head->next ...
在C语言中,实现链表通常涉及以下步骤: 1. 定义节点结构:创建一个结构体,包含数据部分和指向下一个节点的指针。 2. 初始化链表:创建头节点,并将其指针设置为NULL,表示空链表。 3. 插入节点:在链表的头部、...
详细注释了代码实现步骤 /************************************************************************* > File Name: lstack.c > Author: Gnglas > Mail: 2254228017@qq.com > Created Time: 2020年01月...
链表的应用广泛,如实现队列、栈、哈希表等数据结构,以及解决各种算法问题,如LRU缓存淘汰策略等。 二、快速排序 快速排序是一种高效的排序算法,由C.A.R. Hoare在1960年提出。它的主要思想是分治法,通过选取一个...
在这个"shujujiegou.rar_c 数据结构_数据结构_栈_链表 实现_顺序表"压缩包中,包含了C语言实现的数据结构相关的源代码,主要关注的是顺序表、链表和栈这三种基本数据结构。下面我们将逐一探讨这些数据结构及其基本...
本文将深入探讨一种常用的数据结构——栈,特别是顺序栈和链表栈,它们都是实现栈功能的不同方式。栈通常被称为“后进先出”(LIFO,Last In First Out)的数据结构,广泛应用于各种算法和程序设计中,如表达式求值...
以上就是使用C语言实现从尾到头打印链表的方法,涉及到的主要知识点有链表的数据结构、链表节点的定义、链表反转的递归实现以及递归打印链表。这些概念和技能在数据结构与算法的学习中非常重要,对于理解和编写复杂...
在本文中,我们将深入探讨链表的概念、类型、操作以及C语言中的实现。 链表与数组的主要区别在于,它不连续存储数据。每个元素(节点)包含两部分:数据域和指针域。数据域存储实际的数据,而指针域存储指向下一个...
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 ...基于C语言实现的链表、栈、队列、排序算法以及二叉树源码(课程作业).zip
本课程旨在为学生提供关于数据结构与算法的基础知识,重点介绍线性表这一重要的数据结构类型,尤其是链表的实现与应用。通过学习,学生将能够理解链表的基本概念、掌握链表的操作方法,并能够在实际编程中灵活运用...
本压缩包文件包含了关于C语言中数据结构实现的一些程序,具体涉及到了顺序链表、单链表和双链表以及栈的数据结构。下面我们将详细探讨这些知识点。 首先,我们来看顺序链表。顺序链表是一种线性数据结构,其元素在...
理解并熟练掌握栈、链表和循环链表的概念及其在C语言中的实现,是提升编程技能的关键步骤。这些基础知识不仅在C语言编程中至关重要,也是其他高级数据结构和算法的基础。在实际编程项目中,它们常被用于优化内存使用...