typedef int T; //数据元素类型
struct LNode { T data; LNode* next;
} ; struct LinkStack { LNode* top ; // 栈顶指针int len; // 栈的长度
} ; LinkStack* LS_Create( ) ;
void LS_Free( LinkStack* ls ) ;
void LS_MakeEmpty( LinkStack* ls ) ;
bool LS_IsEmpty( LinkStack* ls ) ;
int LS_Length( LinkStack* ls ) ;
void LS_Push( LinkStack* ls, T x) ;
bool LS_Pop( LinkStack* ls, T& item) ;
bool LS_Top( LinkStack* ls, T& item) ;
void LS_Print( LinkStack* ls ) ;
int main ( )
{ LinkStack* ls = LS_Create( ) ; char dowhat[ 100 ] ; while( true) { scanf( "%s" , dowhat) ; if ( ! strcmp( dowhat,"push" )) { T x; scanf( "%d" , & x) ; LS_Push( ls,x) ; } else if ( ! strcmp( dowhat,"pop" )) { T item; LS_Pop( ls, item) ; } else { break ; } } int length = LS_Length( ls) ; printf( "Stack length: %d\n " , length) ; LS_Print( ls) ; LS_Free( ls) ;
}
/*创建栈*/
LinkStack* LS_Create ( ) { LinkStack* ls = ( LinkStack*) malloc( sizeof( LinkStack)) ; ls-> top = NULL; ls-> len = 0 ; return ls ;
}
/*释放栈*/
void LS_Free( LinkStack* ls )
{ LNode* curr = ls-> top; while( curr) { LNode* next = curr-> next; free( curr) ; curr = next; } free( ls) ;
} /*将栈变为空栈*/
void LS_MakeEmpty( LinkStack* ls )
{ LNode* curr = ls-> top; while( curr) { LNode* next = curr-> next; free( curr) ; curr = next; } ls-> top = NULL; ls-> len = 0 ;
} /*判断栈是否为空*/
bool LS_IsEmpty( LinkStack* ls )
{ // 请在这里补充代码,完成本关任务return ls-> top== NULL?true:false; } /*获取栈的长度*/
int LS_Length( LinkStack* ls )
{ // 请在这里补充代码,完成本关任务return ls-> len; } /*将x进栈*/
void LS_Push( LinkStack* ls, T x)
{ // 请在这里补充代码,完成本关任务LNode*link= ( LNode*) malloc( sizeof( LNode)) ; link-> data= x; link-> next= ls-> top; ls-> top= link; ls-> len++; } /*出栈。出栈元素放入item;如果空栈,将返回false*/
bool LS_Pop( LinkStack* ls, T& item)
{ // 请在这里补充代码,完成本关任务LNode*link= ls-> top; if( LS_IsEmpty( ls)) { return false ; } item = ls-> top-> data; ls-> top= link-> next; free( link) ; ls-> len--; return true ; } /*读栈顶元素放入item。如果空栈,将返回false*/
bool LS_Top( LinkStack* ls, T& item)
{ // 请在这里补充代码,完成本关任务if( LS_IsEmpty( ls)) { return false ; } item = ls-> top-> data; return true ; } /*从栈顶到栈底打印各结点数据*/
void LS_Print( LinkStack* ls )
{ if ( ls-> len== 0 ) { printf( "The stack: Empty!" ) ; return ; } printf( "The stack (from top to bottom):" ) ; LNode* curr = ls-> top; while( curr) { printf( " %d" , curr-> data) ; curr = curr-> next; } // printf( "\n " ) ;
}