s2010编译C++ 链栈的使用

// CTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;

typedef int ElemType;
struct Stack{
    ElemType data;
    Stack *next;
};
void InitStack(Stack* &HS){
    HS = NULL;
}
void Push(Stack* &s,const ElemType &item){//元素item进栈,即插入到栈顶
    //为插入元素获取动态节点
    Stack * newptr = new Stack;
    //给新分配的节点赋值
    newptr->data=item;
    //向栈顶插入新结点
    newptr->next=s;
    s=newptr;
}
ElemType Pop(Stack* &s){//删除栈顶元素,并返回
    if(s==NULL){
        cerr<<"Linked stack is empty!"<<endl;
        exit(1);
    }
    Stack *p= s;//暂存栈顶结点指针
    s = s->next;//使栈顶指针指向下一个节点
    ElemType temp = p->data;//暂存原栈顶元素
    delete p;              //回收原栈顶结点
    return temp;
}
ElemType Peek(Stack* &s){//读取栈顶的元素
    if(s==NULL){
        cerr<<"Linked stack is empty!"<<endl;
        exit(1);
    }
    return s->data;
}
bool EmptyStack(Stack* &s){//清空栈
    return s==NULL;
}
void ClearStack(Stack* &s){
    Stack *cp,*np;
    cp = s;
    while(cp!=NULL){
        np = cp->next;
        delete cp;
        cp = np;
    }
    s = NULL;
}
int _tmain(int argc, _TCHAR* argv[])
{
    Stack *s;
    InitStack(s);//初始化栈
    int x;//从键盘上输入x
    cin >>x;
    while(x!=-1){
        Push(s,x);//向栈中加入数据
        cin>>x;
    }
    while(!EmptyStack(s)){//如果栈不为空
        cout<<Pop(s)<<‘ ‘;
    }
    cout<<endl;
    ClearStack(s);
    system("pause");
    return 0;
}

输入数据 9 8 1 2 3 5 6 -1 9 3 4

输出数据6 5 3 2 1 8 9

时间: 2024-10-08 12:57:02

s2010编译C++ 链栈的使用的相关文章

5、蛤蟆的数据结构笔记之五链栈实现

5.蛤蟆的数据结构笔记之五链栈实现 本篇名言:"人生就像奕棋,一步失误,全盘皆输." 昨天对栈和队列进行了定义.这次我们来看下如何使用代码来实现链栈和链队列,后续蛤蟆会记录如何将栈应用到实际问题中. 栈一般是顺序结构,但是也可以采用链式存储结构,具体如下实现. 欢迎转载,转载请标明出处: 1.  定义结构体 #define MAX_STACKS10 typedef struct { intkey; /*otherfields */ }element; typedef struct st

链栈的实现

链栈即链式栈,也就是说我们不用再考虑空间的大小,可随心所欲的进行数据的插入/删除了.和顺序栈一样,仍然要保持其stack的特性,只在一端进行插入和删除,后进先出. 示例代码: #ifndef _LINKSTACK_H #define _LINKSTACK_H typedef int ElemType; typedef int Status; typedef struct linkStack { ElemType data; struct linkStack * top; }linkStack;

堆栈(链栈)

#include<cstdlib> #include<iostream> #include<fstream> using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef char SElemType; typedef struct StackNode{ SElemType data; struct StackNode *next; }S

链栈和链队列的类实现

#include<iostream>#include<cassert> using namespace std; template <class T>//链栈 struct LinkNode{T data;LinkNode<T> *Link;LinkNode(LinkNode<T> *pr=NULL){Link=pr;}LinkNode(const T& item,LinkNode<T> *pr=NULL){data=item

数据结构(java语言描述)链栈的定义

1.定义栈接口 package stack;public interface Istack {    public void clear();    public boolean isEmpty();    public int length();    public Object peek();    public void push(Object x) throws Exception;    public Object pop();} 2.定义Node结点 package stack; i

链栈-书上习题

元素的入栈出栈 链栈: 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 struct stack 5 { 6 char data; 7 stack *next; 8 }; 9 stack* initstack() /*为栈头指针申请内存*/ 10 { 11 stack *s=new stack; 12 s->next=NULL; 13 return s; 14 } 15 int isempt

java实现链栈

前面学习了java实现顺序栈:http://www.cnblogs.com/lixiaolun/p/4644134.html 接下来,学习java实现链栈. 链栈类代码: package linkedstack; public class LinkStack { private Element base; private Element top; class Element { public Object data; public Element next; } /** * 初始化栈 * */

Linux上安装编译工具链

在Linux上安装编译工具链,安装它会依赖dpkg-dev,g++,libc6-dev,make等,所以安装之后这些依赖的工具也都会被安装.ubuntu软件库中这么描述 Informational list of build-essential packages If you do not plan to build Debian packages, you don't need this package. Starting with dpkg (>= 1.14.18) this package

数据结构(C实现)------- 链栈

描述:      链栈,即栈的链式存储结构,链栈通常使用不带头结点的单链表来表示,因此其结点的结构和单链表的结点结构相同. 在一个链栈中,栈底就是链表的最后一个结点,而栈顶总是链表的第一个结点.因此,新入栈的元素即为链表中采用头插法新加入的结点,一个链栈可以由栈顶指针唯一确定,当top为NULL时,则表示该栈是一个空的链栈.  实现:   链栈结点的类型描述: typedef int ElemType; typedef struct node{ ElemType data; struct nod