栈的链表实现 与 数组实现

来源:互联网 发布:淘宝店铺图片轮播 编辑:程序博客网 时间:2024/05/21 05:55

 

 

//链表实现

#include <stdlib.h>

#include <stdio.h>

 

#define   FALSE          0

#define   TRUE           1

#define   OK             1

#define   ERROR         -1

 

typedef char dataType;

 

struct StackNode {

dataType data;

struct StackNode *link;

} ; 

 

struct stacks {

struct StackNode *top;

};

 

typedef struct stacks LinkStack;

 

 

int initStack( LinkStack *s )

{

s->top = (struct StackNode *) malloc( sizeof(struct StackNode));

s->top->link = NULL;

return OK;

}

 

int stackEmpty( LinkStack *s )

{

return ( s->top->link == NULL );

}

 

int push( LinkStack *s, dataType node )

{

struct StackNode *newNode = NULL;

 

if( !( newNode = ( struct StackNode * ) malloc( sizeof( struct StackNode ))) )

return ERROR;

 

newNode->data = node;

newNode->link = s->top;

s->top = newNode;

 

return OK;

}

 

dataType pop( LinkStack *s )

{

if(stackEmpty( s ))

return ERROR;

struct StackNode *topNode = NULL;

 

topNode = s->top;

s->top = s->top->link;

char ch = topNode->data;

 

free( topNode );

 

return ch;

}

 

dataType getStackTop( LinkStack *s )

{

if( stackEmpty( s ) )

return ERROR;

return s->top->data;

}

 

 

 

int main()

{

LinkStack *s = ( LinkStack * ) malloc( sizeof( LinkStack ));

 

initStack( s );

 

push( s, 'm' );

push( s, 'e' );

push( s, 'j' );

push( s, 'h' );

push( s, 'a' );

push( s, 'n' );

 

printf("%c /n", getStackTop( s ));

 

while( !stackEmpty( s ) )

{

printf("%c /n", pop( s ));

}

 

return OK;

}

//数组实现
#include <stdio.h>
#include <stdlib.h>
#define   MAXSIZE        100
#define   TRUE           1
#define   FALSE          0
#define   OK             1
#define   ERROR          0
typedef int dataType;
typedef struct StackNode {
dataType data;
int top;
int maxsize;
struct StackNode *next;
} stacks;
void initStack( stacks *s )
{
s->top = -1;
s->maxsize = MAXSIZE;
}
int stackEmpty( stacks *s )
{
return ( s->top == -1 );
}
int stackFull( stacks *s )
{
return ( s->top == s->maxsize );
}
int push( stacks *s, dataType data)
{
if( stackFull( s ) )
return ERROR;
s->top++;
s[s->top].data = data;
return OK;
}
dataType pop( stacks *s )
{
if( stackEmpty( s ) )
return ERROR;
dataType temp;
temp = s[s->top].data;
s->top--;
return temp;
}
dataType getTop( stacks *s )
{
return s[s->top].data;
}
void main()
{
stacks *s = ( stacks * ) malloc( sizeof( stacks ));
initStack( s );
int i= 0;
while( i++ < 5)
push( s, i);
while( !stackEmpty( s ) )
{
printf(" %d ", pop( s ));
}
printf("/n");
}
//以上代码通过编译可以直接运行的

 

 

原创粉丝点击