close

#include<iostream>
using namespace std;

struct NODE//node裡面應該會有一個data,一條鍊子
{
    int data;
    struct NODE *L;//只會往左邊走,其實我本來想要寫從左到右,可是我寫錯又懶得改..
};

typedef struct NODE Node;

Node* CREATE();
int ISEMPTY(Node* top);
Node* ADD(Node* top, int item);
Node* DELETE(Node* top);
Node* INSERT(Node* top, int item);//以上為基本功能選項


Node* CREATE(void){return NULL;}//新增的時候什麼都沒有,一定是傳回NULL

int ISEMPTY(Node* top)
{
    return (top==NULL);//如果top 是NULL,表示這個串列是空的
}

Node* ADD(Node* top, int item)//功能:新增一個節點給串列(一般用於空串列
{
    Node* newnode;//定義一個節點叫做newnode, 沒有值也沒有下一個
    newnode=(Node*)malloc(sizeof(Node));//用memory allocation 分配空間給newnode
    newnode->data=item;
    //newnode的data指向item,就當作把newnode的data值改成item的值好了,比較好懂一點=  = 
    newnode->L=top;//newnode的下一個叫做top
    top=newnode;//然後top的下一個從NULL變成newnode
    return top;
}

Node* DELETE(Node* top)
{
    Node* target;//先弄個target
    target = (Node*)malloc(sizeof(Node));//比照新增節點模式
    target=top;//讓target等於top
    if(target == NULL){printf("stack is empty!\n"); return NULL;}
    //假設target等於null那就是說這個stack是空的...但老實說...,
    //這句也可以放在最一開始新增Node* target之前就先判斷,而且我覺得這樣大概比較好...
    //因為如果if (top==NULL){return NULL;}放在最前面
    //一開始就會先做判斷,會比較節省資源,除非stack非空才會開始有其他動作
    //如果是空stack就直接覆蓋一張NULL然後結束這一回合...(欸?)
    top=top->L;
    //把top移到自己的下一個位置,或者也可以寫成top=target->L, 因為這時候target跟top其實已經相等了
    free(target);//然後把targetfree掉
    return top;

}

Node* INSERT(Node* top, int item)//有準備要放入的元素item,也有stack 裡面一定會出現的top
{
    Node* package;
    package = (Node*)malloc(sizeof(Node));
    package->data=item;//先讓package的值與item的值指向item
    package->L=top->L;//然後讓package的下一個指向top的下一個
    top->L=package;//再把top的下一個轉而指向package的屁股
    return top;
}

void main()
{
    Node* A;
    A=CREATE();

    system("pause");
}

arrow
arrow
    全站熱搜

    archerdevil 發表在 痞客邦 留言(0) 人氣()