栈的操作(创建,入栈,出栈,清空,遍历等等)

原创 2015年07月09日 22:13:38
#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 pS);
void push (PSTACK pS,int val);
void traverse(PSTACK pS);
bool pop(PSTACK pS,int * pVal);
bool empty(PSTACK pS);
void clear(PSTACK pS);


int main()
{
    STACK S;
int val;




init(&S);//造出一个空栈
for(int i=0;i<=15;i++)
{
      push(&S,i);
}
/*
push(&S,1);//压栈
push(&S,3);
push(&S,4);
push(&S,5);
push(&S,13);
push(&S,11);
*/
    traverse(&S);//遍历输出
//出栈
//pop(&S,&val);
if(pop(&S,&val))
{
printf("出栈成功,出栈的元素是%d\n",val);
}
else
{
     printf("出栈成功");
}
     traverse(&S);//遍历输出



//traverse(&S);//遍历输出


    clear(&S);//清空


    if(empty(&S))
{
printf("栈为空\n ");
}
else
{
          printf("栈为非空\n");
}


return 0;
}


void init(PSTACK pS)
{
pS->pTop=(PNODE)malloc(sizeof(NODE));
if(NULL==pS->pTop)
{
printf("动态内存分配失败");
exit(-1);
}
else
{
pS->pBottom = pS->pTop;
pS->pTop->pNext = NULL;
}


}


void push (PSTACK pS,int val)
{
PNODE pNew=(PNODE)malloc(sizeof(NODE));


pNew->data=val;
pNew->pNext=pS->pTop;
pS->pTop=pNew;
return;
}
void traverse(PSTACK pS)
{
PNODE p=pS->pTop;


while(p!=pS->pBottom)
{
printf("%d  ",p->data);
p=p->pNext;
}
printf("\n");
}


bool empty(PSTACK pS)
{
if(pS->pTop==pS->pBottom)
{
return true;
}
else
{
return false;
}
}
bool pop(PSTACK pS,int * pVal)
{
if(empty(pS))//pS存放的就是栈的地址
{
return true;
}
else
{
        PNODE r = pS->pTop;
* pVal = r->data;
pS->pTop = r->pNext;
free(r);
r = NULL;
return true;
}
}
void clear(PSTACK pS)
{
if(empty(pS))
{
return;
}
else
{
PNODE p=pS->pTop;
PNODE q=NULL;
while(p!=pS->pBottom)
{
q=p->pNext;
free(p);
p=q;
}
pS->pTop=pS->pBottom;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

【数据结构】顺序栈的基本操作操作---C/C++

本博客所有文章均已迁入到http://www.coderbean.com//头文件内容 #define STACK_INIT_SIZE 10 #define STACKINCREMENT 2 stru...
  • coderbean
  • coderbean
  • 2015年08月16日 18:49
  • 2652

c++实现栈的各种操作

以下是c++实现的栈的各种操作: #include using namespace std; // 定义一个节点的结构 typedef struct Node { int data...
  • liuwei271551048
  • liuwei271551048
  • 2014年05月10日 21:19
  • 628

栈的两种遍历方式

一、普通遍历 public void test05(){ MyLinkedStack myStack = new MyLinkedStack(); myStack...
  • qq_19925065
  • qq_19925065
  • 2016年09月11日 15:42
  • 803

栈的初始化、压栈,栈的遍历、出栈、清空栈

一、栈的初始化 // // // void init_stack(PSTACK pStack) { pStack->pTop = (PNODE)malloc(sizeof(NODE))...
  • fly_lhw
  • fly_lhw
  • 2014年03月23日 01:45
  • 960

栈的操作,创建,遍历,入栈,出栈

#include #include #include typedef struct node{ int data; struct node *pNext; }NODE, *PNODE; ...
  • xiaohaijiejie
  • xiaohaijiejie
  • 2015年03月02日 21:28
  • 940

c++ STL中栈stack的用法

1.声明一个stack    stack s1;    stack s2; 2.stack中的操作     stack s;    s.push(x)      无返回值,将元素x压栈 ...
  • yibcs
  • yibcs
  • 2013年10月26日 16:53
  • 4796

STL中栈和队列的使用方法

STL 中优先队列的使用方法(priority_queu) 基本操作: empty() 如果队列为空返回真 pop() 删除对顶元素 push() 加入一个元素 size() 返回优先队...
  • jinjide_ajin
  • jinjide_ajin
  • 2015年07月28日 17:37
  • 2199

【栈】C++栈的建立、初始化、插入、删除

栈是限定在尾部进行插入或删除的线性表。表尾称为栈顶(top),表头称为栈底(base)。栈的修改按照后进先出的原则。 栈有两种存储表示方法:顺序栈和链栈。顺序栈是利用一组连续存储单元依次存放栈底到栈...
  • yebanxin
  • yebanxin
  • 2016年07月22日 16:03
  • 5906

三种使用栈的后序遍历方法

二叉树后序遍历方法很多,O(n)的时间与空间复杂度都是标识左子树与右字数被访问后再访问根节点。...
  • qq_27802405
  • qq_27802405
  • 2016年03月15日 10:41
  • 327

[数据结构]c语言实现顺序栈的入栈,出栈,清空,销毁等操作

/* 顺序栈 栈的抽象数据类型 ADT 栈(stack) Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系 Operation InitStack(*S):初始化操作...
  • the_victory
  • the_victory
  • 2016年10月08日 19:52
  • 3778
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:栈的操作(创建,入栈,出栈,清空,遍历等等)
举报原因:
原因补充:

(最多只允许输入30个字)