1,栈
栈的理解
顺序栈
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int * data;
int maxlen;
int top;
} SqStack, * sqstack;
sqstack creatStack ( int len) {
sqstack s;
if ( ( s = ( SqStack* ) malloc ( sizeof ( SqStack) ) ) == NULL ) {
printf ( "malloc failed !" ) ;
return NULL ;
}
if ( ( s-> data = ( int * ) malloc ( len * sizeof ( int ) ) ) == NULL ) {
printf ( "malloc failed !" ) ;
return NULL ;
}
s-> maxlen = len;
s-> top = - 1 ;
return s;
}
int stack_empty ( sqstack s) {
return ( s-> top == - 1 ? 1 : 0 ) ;
}
int stack_full ( sqstack s) {
return ( s-> top == ( s-> maxlen - 1 ) ? 1 : 0 ) ;
}
int stack_push ( sqstack s, int value) {
if ( s-> top == s-> maxlen - 1 ) {
printf ( "stack is full !" ) ;
return - 1 ;
}
s-> top++ ;
s-> data[ s-> top] = value;
return 1 ;
}
int stack_pop ( sqstack s) {
if ( s-> top == - 1 )
return 0 ;
s-> top-- ;
return ( s-> data[ s-> top+ 1 ] ) ;
}
int main ( ) {
int len = 10 ;
sqstack s;
s = creatStack ( len) ;
stack_push ( s, 1 ) ;
stack_push ( s, 2 ) ;
stack_push ( s, 4 ) ;
stack_push ( s, 6 ) ;
while ( ! stack_empty ( s) )
printf ( "出栈元素 %d\n" , stack_pop ( s) ) ;
return 0 ;
}
链栈
#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype;
typedef struct node {
Elemtype data;
struct node* next;
} LinkStack, * linkstack;
linkstack stack_init ( ) {
linkstack s;
s = ( LinkStack * ) malloc ( sizeof ( LinkStack) ) ;
s = NULL ;
return s;
}
void stack_destroy ( linkstack & s) {
linkstack pre = s, p = pre-> next;
if ( pre == NULL )
return ;
while ( p!= NULL )
{
free ( pre) ;
pre = p;
p = p-> next;
}
free ( pre) ;
}
void stack_push ( linkstack & s, Elemtype x) {
linkstack p;
p = ( LinkStack * ) malloc ( sizeof ( LinkStack) ) ;
p-> data = x;
p-> next = s;
s = p;
}
int stack_pop ( linkstack & s, Elemtype & x) {
linkstack p;
if ( s == NULL )
return 0 ;
p = s;
x = p-> data;
s = p-> next;
free ( p) ;
}
int stack_empty ( linkstack s) {
if ( s == NULL )
return 1 ;
else
return 0 ;
}
int main ( ) {
Elemtype e;
linkstack s;
e = 0 ;
s = stack_init ( ) ;
stack_push ( s, 1 ) ;
stack_push ( s, 3 ) ;
stack_push ( s, 5 ) ;
stack_push ( s, 7 ) ;
while ( ! stack_empty ( s) )
{
stack_pop ( s, e) ;
printf ( "pop: %d\n" , e) ;
}
return 1 ;
}