栈的两种实现方式

1、栈的链表实现

通过链表前端的插入来实现push,通过删除表前端元素来实现pop。

栈链表的类型声明:

struct Node;
typeof struct Node *PtrToNode;
typeof PtrToNode Stack;

int IsEmpty( Stack S );
Stack CreateStack( void );
void DisposeStack( Stack S );
void MakeEmpty( Stack S );
void Push( ElementType X,Stack S );
ElementType Top( Stack S );
void Pop(Stack S);

struct Node{
  ElementType Element;
  PtrToNode Next;
}

判断是否是空栈

int IsEmpty(Stack S) {
   return S->Next == Null;
}

创建一个空栈

Stack CreateStack( void ) { 
//让表头节点指向空
   Stack S;
   S = malloc( sizeof( struct Node ) );
   if( S == Null ) Error( "Out of space!" );
   S->Next == Null;
   MakeEmpty( S );
   returen S;
}

void MakeEmpty( Stack S ) {
   if( S == Null ) Error( "Must use CreateStack first");
   else
   while( !IsEmpty( S ) )
   Pop(S);
}

进栈、出栈和去栈顶操作

void Push( ElementType X, Stack S ) {
    PtrToNode TmpCell;
    TmpCell = malloc( sizeof( struct Node ) );
    if( TmpCell == Null ) Error("Out of space");
    else 
    {
       TmpCell->Element = X;
       TmpCell->Next = S->Next;
       S->Next = TmpCell;
    }
}

void Pop( Stack S ) {
   PtrToNode FirstCell;
   if( IsEmpty( S ) ) {
     Error(" Empty Stack ");
  }
  else {
     FirstCell = S->Next;
     S->Next = S->Next->Next;
     free( FirstCell );
   }
}

ElementType Top( Stack S ) {
    if( !IsEmpty( S ) ) {
        return S->Next->Element;
    }
    Error(" Empty stack ");
    return 0; 
}

2、栈的数组实现

数组方式实现栈的进栈和出栈

void Push( ElementType X,Stack S ){
    if( IsFull( S ) ) { //判断栈是否慢
      Error(" Full Stack ");
     }
     else {
     //栈顶先自增,然后赋值X
      S->Array[ ++S->TopOfStack ] = x;
     } 
void Pop( Stack S ) {
   if( IsEmpty( S ) ){
      Error("Empty Stack");
  }
  else {
      S->TopOfStack--;
}
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值