1. 程式人生 > >鏈棧ADT的實現(C語言) 2018.3.13

鏈棧ADT的實現(C語言) 2018.3.13

#include <stdio.h>
#include <stdlib.h>
/**< 鏈棧的實現 */
/**< 棧結點實現 */
typedef struct
{
    int data;
    struct StNode* next;
}StNode;
/**< 棧結構實現 */
typedef struct
{
    StNode* top;
    StNode* base;
}Stack;
/**< 初始化棧(初始化頭結點,首尾指標分別指向頭結點) */
void Init_Stack(Stack* q)
{
    StNode* p;
    p->data=NULL;
    p->next=NULL;
    q->top=p;
    q->base=p;
}
/**< 棧判空 */
int Empty_Stack(Stack* p)
{
    if(p->top==p->base)
        return 1;
    else return 0;
}
/**< 壓棧 */
void Push_Stack(Stack* q,int Val)
{
    StNode* p;
    p->data=Val;
    p->next=q->top->next;
    q->top->next=p;
}
/**< 出棧 */
void Pop_Stack(Stack* q,int *Val)
{

    if(Empty_Stack(q)==0)
    {
        StNode* b=q->top->next;
        StNode* a;
        *Val=b->data;
        a=q->top->next;
        q->top->next=b->next;
    }
    else;
}
/**< 列印棧頂元素 */
void GetTop_Stack(Stack* q)
{
    StNode* a=q->top->next;
    printf("%d",a->data);
}
int main()
{
    Stack S;
    Init_Stack(&S);
    printf("Hello world!\n");
    return 0;
}