首页 > 其他 > 详细

时间:2014-03-20 18:07:57      阅读:412      评论:0      收藏:0      [点我收藏+]

# 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;//pBottem是指向栈底下一个没有实际意义的元素

}STACK, *PSTACK;


void init( PSTACK );

void push( PSTACK, int );

void traverse( PSTACK );

bool pop( PSTACK, int * );

bool empty( PSTACK pS );


int main( void )

{

STACK S;//STACK等价于struct Stack

int val;

init( &S );//目的是造出一个空栈

push( &S, 1 );//压栈

push( &S, 2 );

push( &S, 3 );

push( &S, 4 );

push( &S, 5 );

push( &S, 6 );

push( &S, 7 );

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

clear( &S ); //清空数据

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

if( pop( &S, &val ) )

{

printf( "出栈成功,出栈的元素是&d\n", val );

}

else

{

printf( "出栈失败" );

}

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

return 0;

}


void init( PSTACK pS )

{

pS->pTop = ( PNODE )malloc( sizeof( NODE ) );

if( NULL == pS->pTop )

{

printf( "动态内存分配失败!\n" );

exit( -1 );

}

else

{

pS->pBottom = pS->pTop;

pS->pTop = NULL;//或是pS->pBottom = NULL;

}

}


void push( PSTACK pS, int val )

{

PNODE pNew = ( PNODE )malloc( sizeof( NODE ) );

pNew->data = val;

pNew->pNext = pS->pTop;//pS->Top不能改为pS->pBottom

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" );

return;

}


bool empty( PSTACK pS )

{

if( pS->pTop == pS->pBottom )

return true;

else

return false;

}


//把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,如果出栈失败,则返回false,否则true

bool pop( PSTACK pS, int *pVal)

{

if( empty( pS ) )//pS本身存放的就是S的地址

{

return false;

}

else

{

PNODE r = pS->pTop;

*pVal = r->data;

pS->pTop = r->pNext;

free( r );

r = NULL;  //为什么要把r赋给NULL呢??

return true;

}

}


//clear清空

void clear( PSTACK pS )

{

if( empty( pS ) )

{

return ;

}

else

{

PNODE p = pS->pTop;

PNODE q = p->pNext;

while( p != pS->pBottom )

{

q = p->pNext;

free( p );

p = q;

}

pS->pTop = pS->pBottom;

}

}


本文出自 “Linux运维” 博客,请务必保留此出处http://2853725.blog.51cto.com/2843725/1379904

栈,布布扣,bubuko.com

原文:http://2853725.blog.51cto.com/2843725/1379904

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!