</pre><pre name="code" class="cpp"><pre name="code" class="cpp"># include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct NODE // 創建結點的結構體
{
int data;
struct NODE *next;
}node,*pnode;
typedef struct STRACK //創建頭指針和尾指針的結構體
{
pnode ptop;
pnode pbottom;
}stack,*pstack;
void traverse(pstack ps); //遍歷棧輸出
void init(pstack ps); // 建立頭指針和尾指針
void push(pstack ps,int val); //壓棧
void clear(pstack ps); //釋放棧
void pop(pstack ps,int * val); //棧頂元素出棧 (出棧)
int main (void)
{
int val;
pstack ps;
ps = (pstack)malloc(sizeof(stack)); //爲頭指針和尾指針分配空間
init(ps);
push(ps,1);
push(ps,2);
push(ps,3);
traverse(ps);
pop(ps,&val);
traverse(ps);
pop(ps,&val);
traverse(ps);
clear(ps);
traverse(ps);
return 0;
}
void init(pstack ps)
{
pnode ptr;
ptr = (pnode)malloc(sizeof(node));
ptr = ps->ptop;
ps->pbottom = ps->ptop; //將頭指針和尾指針初始化
ps->ptop->next = NULL;
}
void push(pstack ps,int val)
{
pnode ptr;
ptr = (pnode)malloc(sizeof(node)); //爲結點分配空間
ptr->data = val; //將目標元素存入結點
ptr->next = ps->ptop; //指向上一節點
ps->ptop = ptr; //將頭指針上移
}
void clear(pstack ps)
{
pnode p,q;
p = ps->ptop; //將p指向頭結點
q = NULL;
while(p != ps->pbottom) //遍歷棧
{
q = p->next; //將q指向上一節點
free(p); //釋放p
p = q;
}
ps->ptop = ps->pbottom; //將頭指針初始化
}
void pop(pstack ps,int * val)
{
pnode ptr;
ptr = ps->ptop; //將ptr指向頭指針
*val = ptr->data; //指針*val指向ptr中的元素
ps->ptop = ptr->next; //將頭指針下移
free(ptr); //釋放ptr結點
ptr=NULL;
}
void traverse(pstack ps)
{
pnode ptr;
ptr = ps->ptop; //將ptr指向頭指針
while(ptr != ps->pbottom) //遍歷棧
{
printf ("%d ",ptr->data); //輸出棧中元素
ptr = ptr->next; //指向上一結點
}
printf ("\n");
}
棧——鏈表實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.