1. 程式人生 > >C語言基礎入棧,出棧操作

C語言基礎入棧,出棧操作

 C語言入棧,出棧基礎操作,裡面非常詳細了,我就不囉嗦了

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include<cstring>
#define ERROR -1
typedef int ElementType;
typedef enum {
    push, pop, end
} Operation;
/*typedef enum {
    false, true
} bool;*/
typedef int Position;
typedef struct SNode *PtrToSNode;
struct SNode {
    ElementType *Data;  /* 儲存元素的陣列 */
    Position Top;       /* 棧頂指標       */
    int MaxSize;        /* 堆疊最大容量   */
};
typedef PtrToSNode Stack;

//初始化棧
Stack CreateStack(int MaxSize)
{
    //準備存放結構體型的變數資料
    Stack S = (Stack)malloc(sizeof(struct SNode));
    //動態申請陣列空間
    S->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
    //把棧頂指標指向0
    S->Top = 0;
    //給MaxSize賦值
    S->MaxSize = MaxSize;
    return S;
}

//入棧
bool Push(Stack S, ElementType X)
{
    //判斷棧頂是否與棧容量相等
    if (S->MaxSize == S->Top)
    {
        //輸出Stack Full
        puts("Stack Full");
        return 0;
    }
    //不相等則棧頂指標+1
    S->Data[S->Top++]=X;
    return 1;
}
//出棧
ElementType Pop(Stack S)
{
  //判斷棧頂是否為空
    if (!S->Top)
    {
      //輸出Stack Empty
        puts("Stack Empty");
        //返回ERROR
            return ERROR;
    }
    //返回棧頂元素
    return S->Data[--S->Top];
}

Operation GetOp()
{
  //定義字元陣列a
    char a[11];
    //把接收的字串寫入字元陣列
    scanf("%s", a);
    //判斷push, pop, end是哪一個,並返回push, pop, end其中一個
    if (!strcmp("Push", a))
        return push;
    if (!strcmp("Pop", a))
        return pop;
    if (!strcmp("End", a))
        return end;
}
//列印棧內元素
void PrintStack(Stack S)
{
    while (S->Top)
    {
        printf("%d ", S->Data[--S->Top]);
    }
    puts("");
}

int main()
{

    ElementType X;
    Stack S;
    int N, done = 0;
     //接收棧容量
    scanf("%d", &N);
    //把棧初始化
    S = CreateStack(N);
    //迴圈操作棧,直到done=1;
    while (!done) {
      //根據輸入操作進行選擇對應操作
        switch (GetOp()) {
        //入棧
        case push:
            scanf("%d", &X);
            Push(S, X);
            break;
         //出棧
        case pop:
            X = Pop(S);
            //出棧元素列印
            if (X != ERROR) printf("%d is out\n", X);
            break;
        //結束程式,列印棧內元素
        case end:
            //列印棧內元素
            PrintStack(S);
            done = 1;
            break;
        }
    }
    return 0;
}