#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");
}
留言列表