数据结构算法复习:栈操作相关

RT,纯练手,记录,不多解释,高手飘过。

//Code by Pnig0s1992
//Date:2012,3,20
#include <stdio.h>
#include <Windows.h> 

typedef struct Node * ptrNode;
typedef ptrNode Stack;
typedef int Element_type; 

struct Node{
    Element_type Element;
    ptrNode pNext;
}; 

Stack CreateStack(void);
BOOL isEmpty(Stack S);
void MakeEmpty(Stack S);
void Push(Element_type x,Stack S);
Element_type Pop(Stack S);
void PrintStack(Stack S); 

int main(int argc,char ** argv)
{
    Stack pHead = CreateStack();
    Push(20,pHead);
    Push(10,pHead);
    Push(40,pHead);
    Push(70,pHead);
    Push(50,pHead);
    Push(90,pHead);
    Push(30,pHead);
    Push(80,pHead);
    printf("\nThe stack:");
    PrintStack(pHead);
    printf("\nThe stack after pop %d.",Pop(pHead));
    printf("\n");
    PrintStack(pHead);
    printf("\nThe stack is %s",isEmpty(pHead) ==TRUE ? "Empty":"Not Empty");
    MakeEmpty(pHead);
    printf("\nAfter empty.");
    printf("\nThe stack is %s",isEmpty(pHead) ==TRUE ? "Empty":"Not Empty");
    system("pause");
    return 0;
} 

Stack CreateStack(void)
{
    ptrNode pNewNode = (ptrNode)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(Node));
    pNewNode->pNext = NULL;
    return pNewNode;
} 

void Push(Element_type x,Stack S)
{
    ptrNode pNewNode = (ptrNode)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(Node));
    pNewNode->Element = x;
    pNewNode->pNext = NULL;
    pNewNode->pNext = S->pNext;
    S->pNext = pNewNode;
} 

Element_type Pop(Stack S)
{
    ptrNode pTemp = S->pNext;
    Element_type x = pTemp->Element;
    S->pNext = pTemp->pNext;
    HeapFree(GetProcessHeap(),0,pTemp);
    return x;
} 

void PrintStack(Stack S)
{
    ptrNode pTemp = S->pNext;
    while(pTemp!=NULL)
    {
        printf("%d ",pTemp->Element);
        pTemp = pTemp->pNext;
    }
} 

BOOL isEmpty(Stack S)
{
    return S->pNext == NULL;
} 

void MakeEmpty(Stack S)
{
    if(isEmpty(S))
    {
        printf("\nThe stack is empty.");
    }else
    {
        while(!isEmpty(S))
            Pop(S);
    }
}

本文出自 “About:Blank H4cking” 博客,请务必保留此出处http://pnig0s1992.blog.51cto.com/393390/811861

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索printf
, stack
, push
isempty
,以便于您获取更多的相关知识。

时间: 2024-09-27 13:38:12

数据结构算法复习:栈操作相关的相关文章

JavaScript数据结构与算法之栈详解

 这篇文章主要介绍了JavaScript数据结构与算法之栈详解,本文讲解了对栈的操作.对栈的实现实例等内容,需要的朋友可以参考下     在上一篇博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈.栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样操作很快,而且容易实现. 一:对栈的操作. 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端陈为栈顶.比如餐馆里面洗盘子,只能先洗

最好是mytc做-数据结构里关于栈的操作

问题描述 数据结构里关于栈的操作 1.采用链式存储实现栈的初始化.入栈.出栈操作. 2. 结构体部分代码: typedef struct node { int data; struct node *next; }StackNode,*LinkStack; //定义栈结构 LinkStack Init_LinkStack() { return NULL; } //初始化 函数(a): LinkStack Push_LinkStack(LinkStack top,int x)//入栈 {-} 函数(

【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作

说明:     往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能   关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入和类型别名   

JavaScript数据结构与算法之栈详解_javascript技巧

在上一篇博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈.栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样操作很快,而且容易实现. 一:对栈的操作. 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端陈为栈顶.比如餐馆里面洗盘子,只能先洗最上面的盘子,盘子洗完后,也只能螺到这一摞盘子的最上面.栈被称为 "后入先出"(LIFO)的数据结构. 由于栈具有后入先出的特点

Python算法之栈(stack)的实现_python

本文以实例形式展示了Python算法中栈(stack)的实现,对于学习数据结构域算法有一定的参考借鉴价值.具体内容如下: 1.栈stack通常的操作: Stack() 建立一个空的栈对象 push() 把一个元素添加到栈的最顶层 pop() 删除栈最顶层的元素,并返回这个元素 peek()  返回最顶层的元素,并不删除它 isEmpty()  判断栈是否为空 size()  返回栈中元素的个数 2.简单案例以及操作结果: Stack Operation Stack Contents Return

谁能解释下&amp;amp;quot;递归的本质就是用压栈与出栈操作&amp;amp;quot;?

问题描述 谁能解释下"递归的本质就是用压栈与出栈操作"? 递归的本质就是用压栈与出栈操作 这句话感觉很有道理啊 解决方案 当递归调用时每次调用自己时可以看做是压栈过程,当递归条件满足结束时,递归一级一级的返回时可以看做是出栈的过程. 解决方案二: 函数调用的本质就是"压栈与出栈操作",递归不过是它的特例,自身调用自身. 解决方案三: 递归可以简单理解为一个大问题分为小问题,然后小问题继续分解,直到能解决,然后几个小问题解决,就是解决一个大问题,金字塔形状最后解决所有

c#-数据结构关于双向栈的问题

问题描述 数据结构关于双向栈的问题 我自己做的小程序 是一个停车管理系统 我把相关的数据结构的定义和函数的定义发下 求大家帮忙看看,是不是我定义的有问题,运行出现问题,大概是在进栈出栈上出现的问题,谢谢大家啦~~ typedef struct ds_Car //地上停车场车辆 { int number; //车号 int hour; //到达的小时 int minute; //到达的分钟 }ds_CarNode; typedef struct //地上停车场(采用双向栈) { ds_CarNod

java类的问题-java数据结构,线性表操作,C(X)=A(X)+B(X)多项式想加

问题描述 java数据结构,线性表操作,C(X)=A(X)+B(X)多项式想加 C(X)=A(X)+B(X)多项式想加.PolySLinkedList类增加C(X)=A(X)+B(X)多项式想加功能,算法实现不依赖于深拷贝,将A和B两条多项式单链表中的所以结点相加合并到新建的C多项式单链表,不改变A和B多项式单链表

栈操作与栈帧 (转)

结构化程序的一个最基本的单元就是"函数"或者叫"过程".在汇编这一层自然也相应的有支持这些概念的指令操作,如栈操作和栈帧的概念. 首先这里要为"打开汇编之门"那篇blog补充一点的是:汇编语言是与机器相关,这里的一切都是基于IA-32机器平台的. 1.寻址方式我们已经知道在操作数表示中有一种是用来指示内存地址的内容的,在GNU Assembly中指示内存地址有多种方式,这些方式被统称"寻址方式".通用的寻址格式为:"