#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//栈中元素的节点
typedef struct Node
{
int data;
struct Node * pNext;
}NODE, *PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK, * PSTACK;
//声明操作函数
void init(PSTACK);//初始化栈
void push(PSTACK,int); //压栈
bool pop(PSTACK ,int *);//出栈
void traverse(PSTACK);//遍历栈
void clear(PSTACK ps);//清空栈
int main(void)
{
STACK s;
int val;
init(&s);
push(&s,1);
push(&s,2);
push(&s,3);
traverse(&s);
pop(&s,&val);
printf("%d\n",val);
traverse(&s);
}
//初始化栈
void init(PSTACK ps)
{
ps->pTop=(PNODE)malloc(sizeof(NODE));
if(ps->pTop==NULL)
{
printf("动态内存分配失败");
exit(-1);
}
ps->pBottom=ps->pTop;
ps->pBottom->pNext=NULL;
}
//压栈
void push(PSTACK ps,int val)
{
PNODE p=(PNODE)malloc(sizeof(NODE));
p->data=val;
p->pNext=ps->pTop;
ps->pTop=p;
return ;
}
//遍历栈
void traverse(PSTACK ps)
{
PNODE p=ps->pTop;
while(p!=ps->pBottom)
{
printf("%d ",p->data);
p=p->pNext;
}
printf("\n");
return;
}
//出栈,不需要返回值,因为直接操作存数据的变量的地址
bool pop(PSTACK ps ,int * val)
{
if(ps->pBottom!=ps->pTop)
{
PNODE p=ps->pTop;
*val =p->data;
ps->pTop=p->pNext;
free(p);
p=NULL;
return true;
}
else
return false;
}
//清空栈
void clear(PSTACK ps)
{
//定义一个临时指针q
PNODE p=ps->pTop , q=NULL;
while(p!=ps->pBottom)
{
q=p->pNext;
free(p);
p=q;
}
ps->pTop=ps->pBottom;
}
分享到:
相关推荐
这个压缩包“算法:C语言实现(第1~4部分)源代码”显然包含了使用C语言编写的算法实现,可能是针对数据结构(Data Structures)的基础知识,以及一些基础到进阶的算法。 首先,我们可以从"DS_C"这个压缩包子文件的...
通过《妙趣横生的算法(C语言实现 第2版)》这本书,初学者可以系统地学习和掌握算法的基本知识,并通过C语言实践提升编程能力。书中的每个算法都会配以详细的解释和实例,有助于读者理解和应用。此外,第二版可能还...
栈的基本操作包括: 1. 初始化:创建一个新的空栈,通常通过分配一定大小的内存空间并设置栈顶指针为-1或0来完成。 2. 压栈(Push):将新元素添加到栈顶,需要检查栈是否已满,若未满则移动栈顶指针并将新元素存入...
2. **基本数据结构**:介绍了数组、链表、栈和队列等基础数据结构的定义、操作和实现。 **第二部分:排序** 这一部分详细阐述了各种排序算法,包括: 1. **简单排序**:如冒泡排序、选择排序、插入排序和希尔排序的...
《算法:C语言实现大全》是一本针对计算机科学与技术领域的经典教材,涵盖了算法分析、数据结构、搜索排序以及图算法等核心主题。这本教材的特别之处在于它完全使用C语言来阐述各种算法,使得读者能够更好地理解和...
3. **栈和队列**:可能包含栈和队列的基本操作实现,如push、pop、enqueue、dequeue等。 4. **树结构**:可能会有二叉树的创建、遍历(前序、中序、后序)以及平衡树(如AVL树)的操作。 5. **图算法**:如...
- 栈的基本操作(push、pop) - 队列的入队与出队 - 栈和队列的应用实例(如括号匹配、队列模拟等) ### 第三部分:排序算法 #### 3.1 冒泡排序 - 原理与步骤 - 时间复杂度分析 - 示例代码演示 #### 3.2 选择排序...
严蔚敏教授的《数据结构(C语言版)》是该领域的经典教材,这本书通过C语言讲解了各种数据结构的原理和操作,如线性表、栈、队列、链表、树、图等,并提供了相应的算法实现。 1. **线性表**:线性表是最基本的数据...
在C语言中实现一个计算器功能是一项基础而有趣的编程任务,它涵盖了数据结构、逻辑思维以及基本的算法设计。栈作为一种重要的数据结构,在这里扮演了关键角色。栈被称为“后进先出”(LIFO)的数据结构,即最后入栈...
本文将深入探讨标题和描述中提到的C语言实现的数据结构和算法,包括二叉树、表达式计算、链式表、顺序表、数组的存储、顺序栈、图的基本操作及最短路径算法,以及约瑟夫环问题。 首先,**二叉树**是一种重要的非...
算法:C语言实现 (第1-4部分)基础知识、数据结构、排序及搜索(原书第3版) 本书是Sedgewick彻底修订和重写的C算法系列的第一本。全书分为四部分,共16章。第一部分“基础知识”(第1—2章)介绍基本算法分析原理。...
- **数组的基本操作**:初始化、访问、修改元素等。 - **字符串处理**:字符串的存储方式、常用字符串函数(如strlen、strcpy等)。 #### 2.2 链表 - **单链表**:节点结构、插入、删除操作。 - **双链表与循环链表**...
C语言是一种强大的编程语言,尤其在算法实现方面表现出色。它是许多现代编程语言的基础,以其高效、简洁和灵活性而闻名。在这个"c语言的各种算法实现"主题中,我们将深入探讨C语言如何被用来构建和实现各种算法,...
栈的基本操作包括压入(Push)、弹出(Pop)、查看栈顶元素(Peek或Top)以及检查栈是否为空(IsEmpty)。在C语言中,我们通常使用数组或链表来实现栈。在这个C语言程序中,可能会使用数组作为底层数据结构,因为...
本资源“基本数据结构及算法 c语言实现”提供了一套经典的C语言实现,帮助学习者深入理解和掌握这些核心概念。 数据结构是组织、管理和存储数据的方式,它为数据的高效访问和操作提供了便利。以下是一些常见的数据...
数据结构是算法实现的基础,常见的数据结构如数组、链表、栈、队列、树、图等,在C语言中有不同的实现方式。例如,数组在C语言中是最基础的数据类型,适合存储固定大小的同类型元素;而链表则更适合动态变化的元素...
例如,指针是C语言的一个重要特性,它允许我们直接操作内存地址,这在处理数据结构和算法时特别有用。 数据结构部分则深入到如何在内存中组织和管理数据。常见的数据结构包括数组、链表、栈、队列、树和图。数组是...
下面将详细解释如何利用栈来实现括号匹配算法,并结合C语言进行实践。 1. **栈的基本概念** - 栈是一种线性数据结构,其操作主要集中在一端,称为栈顶。 - 栈支持两种主要操作:压入(Push)元素,将元素添加到...
C语言作为底层编程语言,因其高效、简洁而被广泛用于系统级编程和算法实现。在本书中,作者通过C语言展示了各种经典算法,帮助读者从实践角度掌握这些算法的精髓。 1. **排序算法**:书中可能包含了常见的排序算法...