//利用链表构建栈。
//输入1 2 3 4 5 0时输出 5 4 3 2 1
#include<stdio.h>
#include<stdlib.h>
#define true 1
#define false 0
typedef struct node{ //建立结构体
int num;
struct node *next;
}Node;
int push(Node **head, int num) //将一个数字压入以head为头的堆栈
{
Node *nextNode;
if(NULL==(nextNode=(struct node *)malloc(sizeof(struct node )))){
return false;
}
nextNode->num = num;
if(NULL == *head){
nextNode->next = NULL;
*head = nextNode;
return true;
}
nextNode->next = *head;//尾插法
*head = nextNode;
return true;
}
int pop(Node **head,int *num) //出栈
{
Node *temp;
if(NULL == *head)return false;
*num = (*head)->num;
temp = (*head)->next;
free(*head);
*head = temp;
return true;
}
int main(int argc, char* argv[]) //主函数
{
int n=0,num;
Node *head;
head=NULL;
printf("Please input numbers end with 0 :\n");
while(1){ //如果不是0,压栈
scanf("%d",&num);
if(0 == num)break;
push(&head,num);
n++;
}
while(pop(&head,&num)){ //出栈输出
printf("%d ", num);
}
printf("\nTotal : %d\n",n);
}
分享到:
相关推荐
使用链表实现栈可以通过创建一个链表节点类,然后创建一个栈类,具有压栈、弹栈、取栈顶元素、加入元素、判断为空以及获取栈中元素的方法。下面是一个使用链表实现栈的示例代码: ``` class LNode(object): def __...
通过学习这个主题,你可以更好地理解链表的工作原理,掌握如何在Python中创建链表类,以及如何利用链表实现栈的特性。这将有助于你在解决实际编程问题时选择合适的数据结构,提高代码的效率和可维护性。
总的来说,利用Delphi中的双向链表实现栈操作提供了一种高效且灵活的方式。通过封装链表的节点操作,我们可以轻松地实现栈的基本功能,同时得益于链表的特性,这种实现方式在处理大量数据时也能保持较好的性能。在...
### 数据结构:图解链表,用链表实现栈的Pop和Push(C语言版) #### 前言 在计算机科学中,数据结构是指一组数据的存储结构,而算法则是针对这些数据的操作方法。本篇文章主要讲解如何利用链表这种数据结构来实现...
- 链表实现栈在动态调整容量和插入删除效率上有优势,但需要额外的指针空间,且访问元素不如数组直接。 在实际应用中,选择哪种方式实现栈取决于具体需求,如数据量大小、空间和时间复杂度的要求等。对于小规模且对...
在本主题“用数组合链表实现栈”中,我们将探讨两种常见的栈实现方式,并尝试将它们结合以提供更灵活和高效的解决方案。 首先,让我们来看看数组实现的栈。数组是最基础的数据结构,它可以提供连续的内存空间来存储...
### 数据结构:图解链表,用链表实现栈(C语言版) #### 一、栈的基本概念 栈(Stack)是一种特殊的线性表,它只允许在一端进行插入或删除操作,通常称这一端为栈顶(Top),另一端为栈底(Bottom)。根据这种特性...
本话题将详细介绍如何利用C语言和链表来实现栈的入栈和出栈功能。 首先,我们需要了解链表的基本概念。链表不同于数组,它的元素不是在内存中连续存储的,而是通过指针相互连接。每个链表节点包含两部分:数据域和...
基于链表实现栈,可以充分利用链表的优势,实现高效的栈操作。 首先,需要实现一个链表类,链表类中包含了基本的链表操作,如添加、删除、查找等。然后,基于链表类,实现一个Stack接口,该接口定义了栈的基本操作...
链表栈是一种数据结构,它利用链表的特性来模拟栈的行为。栈是一种后进先出(LIFO)的数据结构,通常用于临时存储和处理数据。在链表栈中,元素不是存储在固定大小的数组中,而是通过节点链接在一起,每个节点包含一...
在Python中,我们可以直接使用列表来实现栈,但由于列表内部实现为动态数组,对于频繁的尾部操作(如push和pop),效率可能不如专门的链表实现。因此,题目中提到的“链表-使用Python基于链表实现数组栈”就是将栈的...
链表栈是一种特殊的栈结构,它利用链表的数据特性来模拟栈的操作。在传统的数组栈中,由于数组的大小固定,栈顶操作可能会受到数组容量的限制。而链表栈则通过动态创建节点来实现栈的压入和弹出操作,具有更好的灵活...
- **链表栈时间复杂度**:链表实现栈的入栈和出栈操作通常具有常数时间复杂度O(1),因为它们只涉及到对链表头部的简单操作。 2. 数组实现栈: - **数组栈定义**:数组栈是基于固定大小数组的栈,通过调整数组下标...
链表栈是一种数据结构,它利用链表(linked list)的数据结构特性来模拟栈(stack)的行为,即后进先出(LIFO)的原则。下面将详细解释这个实现过程以及涉及的关键知识点。 首先,我们需要理解链表栈的基本操作。栈...
熟悉链表的构建与使用,利用链表实现栈 利用栈求解汉诺塔问题 问题描述 汉诺塔问题: 现有三个塔座,在塔1上叠有64个碟子,所有碟子按从大到小的次序从塔底堆放至塔顶。在塔1旁边还有另外两个塔座(塔2和塔3)。 ...
在本案例中,我们利用链表实现了一个基于栈的迷宫解决方案。迷宫问题通常涉及寻找从起点到终点的最短路径,而栈是解决这类问题的常见工具,因为它支持后进先出(LIFO)的操作特性,非常适合回溯搜索。 首先,我们来...
总结起来,这个程序使用链表实现了队列和栈两种数据结构,利用虚函数和指针实现了面向对象编程中的多态和动态内存管理,同时通过虚析构函数确保了资源的正确释放。这样的设计使得代码更加模块化,易于扩展和维护。
### 利用栈实现逆置单链表 在计算机科学中,数据结构是研究的核心之一。其中,链表和栈是非常基础且重要的两种数据结构。本文将详细介绍如何使用栈来实现单链表的逆置。 #### 一、基础知识回顾 在深入探讨之前,...
在双向循环链表中,我们可以利用链表的特性轻松实现这些操作。派生栈是在原有的双向循环链表基础上增加栈的操作,如下: ```cpp class DerivedStack { private: Node* top; public: DerivedStack() : top(nullptr...
数据结构课程设计主要关注两种基本的数据结构:链表和栈,并通过编程实现它们的各种操作。在本课程设计中,学生需要完成两个主要任务: 1. **单链表的基本操作**: - **创建链表**:这个过程涉及到动态内存分配,...