棧——鏈表實現

</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");


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章