2008秋-链栈-链式存储结构的栈

时间:2021-04-13 00:53:05
/* ---------------------------------------------------------
 Title: Link Stack(链栈) 链栈-链式存储结构的栈 
 请先阅读教材67页, 2.3.2,2.3.4节, 栈的定义及基本运算
 (注意以下程序为简化后的,仅供入门学习之用)
----------------------------------------------------------
*/
#include
< stdio.h >
#include
< stdlib.h >
// 定义栈的结点结构
struct  stacknode
{
   
int  data; // 存放数据元素
    struct  stacknode  *  next; // 指针,指向下一个结点
};
// 初始化栈
struct  stacknode  *  InitialStack()
{
 
struct  stacknode  *  head;
 head
= ( struct  stacknode  * )malloc( sizeof ( struct  stacknode ));
 head
-> next = NULL; //  
  return  head;
}
// 入栈
void  PushIntoStack( struct  stacknode  *  head,  int  value)
{
    
struct  stacknode  *  p;
    p
= ( struct  stacknode  * )malloc( sizeof ( struct  stacknode ));
    p
-> data = value;
    p
-> next = head -> next;
    head
-> next = p;
 }
// 出栈
void  PopFromStack( struct  stacknode  *  head)
{
 
struct  stacknode  *  p;
 
if (head -> next == NULL)
   printf(
" Pop Failed \n " );
 
else
    {
    p
= head -> next;
     head
-> next = p -> next;
    free(p);
     }
}
// 显示栈中所有元素
void  ShowStack( struct  stacknode  *  head)
{
 
struct  stacknode  *  p;
 p
= head -> next;
 printf(
" \nShow all elements in stack:\n " );
 
while (p  !=  NULL)
 {
  printf(
"  %d  " ,p -> data);
  p
= p -> next;
 }
}

void  main()
{
    
struct  stacknode  *  head1;
    head1
= InitialStack();
    ShowStack(head1);
    PushIntoStack(head1,
11 );
    ShowStack(head1);
    PushIntoStack(head1,
22 );
    ShowStack(head1);
    PopFromStack(head1);
    ShowStack(head1);
}