顺序栈的基本操作
# include <stdlib.h>
# include <iostream>
# include <stdio.h>
# define MaxSize 10 typedef struct { int data[ MaxSize] ; int top;
} SqStack;
void InitStack ( SqStack & S) { S. top = - 1 ;
}
bool StackEmpty ( SqStack S) { if ( S. top== - 1 ) return true; else return false;
}
bool Push ( SqStack & S, int x) { if ( S. top== MaxSize- 1 ) return false; S. top = S. top+ 1 ; S. data[ S. top] = x; return true;
}
int Pop ( SqStack & S) { if ( S. top== - 1 ) return false; int x; x = S. data[ S. top] ; S. top = S. top- 1 ; return x;
}
int GetTop ( SqStack & S) { if ( S. top== - 1 ) return false; int x; x= S. data[ S. top] ; return x;
}
bool PrintStack ( SqStack & D) { if ( D. top== - 1 ) { printf ( "空栈" ) ; return false; } for ( int i= D. top; i>= 0 ; i-- ) printf ( "%d " , D. data[ i] ) ; printf ( "\n" ) ; return true;
} int main ( ) { SqStack S; InitStack ( S) ; printf ( "-----进栈-----\n" ) ; Push ( S, 1 ) ; Push ( S, 2 ) ; Push ( S, 3 ) ; Push ( S, 4 ) ; printf ( "栈内元素:" ) ; PrintStack ( S) ; printf ( "栈顶元素:" ) ; int x; x = GetTop ( S) ; printf ( "%d\n" , x) ; printf ( "-----出栈-----\n" ) ; int y; y= Pop ( S) ; printf ( "%d已经出栈\n" , y) ; printf ( "栈内元素:" ) ; PrintStack ( S) ; y= Pop ( S) ; printf ( "%d已经出栈\n" , y) ; printf ( "栈内元素:" ) ; PrintStack ( S) ; y= Pop ( S) ; printf ( "%d已经出栈\n" , y) ; printf ( "栈内元素:" ) ; PrintStack ( S) ; printf ( "栈顶元素:" ) ; int z; z = GetTop ( S) ; printf ( "%d\n" , z) ; return 0 ;
}
链栈的基本操作
# include <stdlib.h>
# include <iostream>
# include <stdio.h>
typedef struct LNode { int data; struct LNode * next;
} LNode, * LinkStack; LinkStack InitStack ( LinkStack & D) { D = ( LNode * ) malloc ( sizeof ( LNode) ) ; D-> next= NULL ; return D;
}
void PrintStack ( LNode * p)
{ LNode * temp; temp = p-> next; printf ( "打印栈:" ) ; while ( temp!= NULL ) { printf ( "%d " , temp-> data) ; temp = temp-> next; } printf ( "\n" ) ;
}
LinkStack Push ( LinkStack & D, int x) { LNode * Q; Q = ( LNode * ) malloc ( sizeof ( LNode) ) ; Q-> next = D-> next; D-> next = Q; Q-> data = x; return D;
}
int Pop ( LinkStack & D) { if ( D-> next== NULL ) return false; LNode * Q; Q = ( LNode * ) malloc ( sizeof ( LNode) ) ; int x; Q = D-> next; D-> next = Q-> next; x = Q-> data; free ( Q) ; return x;
}
int GetTop ( LinkStack & D) { if ( D-> next== NULL ) return false; int x; x = D-> next-> data; return x;
} int main ( ) { LNode * D; InitStack ( D) ; printf ( "-----开始进栈-----\n" ) ; Push ( D, 1 ) ; Push ( D, 2 ) ; Push ( D, 3 ) ; Push ( D, 4 ) ; Push ( D, 5 ) ; PrintStack ( D) ; printf ( "-----栈顶元素-----\n" ) ; int z; z= GetTop ( D) ; printf ( "栈顶元素为%d\n" , z) ; printf ( "-----开始出栈-----\n" ) ; int x; x = Pop ( D) ; printf ( "%d已经出栈\n" , x) ; PrintStack ( D) ; x = Pop ( D) ; printf ( "%d已经出栈\n" , x) ; PrintStack ( D) ; printf ( "-----栈顶元素-----\n" ) ; int y; y= GetTop ( D) ; printf ( "栈顶元素为%d\n" , y) ; return 0 ;
}