C語言實現棧的操作

這是最近實訓時寫的關於棧的一些操作,保存下來:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define  N 10
#define  SIZE 100  

typedef struct STACK{   //數據結構定義:將棧定義爲結構體類型
        char *base;   // 棧底指針
        char *top;   // 棧頂指針
        int size;   //棧的大小
}stack;

//  函數聲明
void Creat_stack(stack &l);
int  Empty_stack(stack &l);
int Pop_stack(stcak &l,char &e);
int Gtop_stack(stack &l,char &e);
int Push_stack(stack &l,char &e);
int Clear_stack(stack &l);

//  函數定義部分
void Creat_stack(stack &l)   // 創建一個空棧
{
	l.base = (char *)malloc(sizeof(char) * SIZE);// 創建棧底空間
	if(!l.base)  // 如果棧底空間創建失敗,則退出
		exit(0);
	l.top = l.base;// 將棧頂指針設爲與棧底相同,表示此時是一個空棧
	l.size = SIZE;    // 棧的大小爲宏定義的大小
}

int Empty_stack(stack &l)   // 判斷棧是否爲空
{
	if(l.base == l.top)
		return 1;
	else 
		return 0;
}


int Pop_stack(stcak &l,char &e)  // 若棧不空,則刪除棧頂元素,用e返回其值,並返回
{
	if(Empty_stack(l))
		return 0;
	e = *(--l.top);
}

int Gtop_stack(stack &l,char &e)   // 若棧不空,則用e返回棧頂元素
{
	if(Empty_stack(l))
		return 0;
	e = *(l.top-1);      // 用e返回棧頂元素
}


int Push_stack(stack &l,char &e)
{ 
	// 插入元素e爲新的棧頂元素
	if(l.top - l.base >= l.size) // 棧滿,增加存儲空間 
	{
		l.base = (char *)realloc(l.base,(l.size + N) * sizeof(char)); // realloc函數:第一個參數爲原地址,第二個參數爲要新開空間的大小
		if(!l.base)
			return 0;


		l.top = l.base + l.size;  // 定位棧頂指針
		l.size += N;    // 修改棧的大小
	}

	*l.top++ = e;
}

int Clear_stack(stack &l)  // 清空棧
{
	char *p = l.top;
	while(!Empty(l))
	{
		p = l.top;
		free(p); // 釋放該結點
		--l.top;
	}
	return 1;
}

int Length_stack(stack &l) // 返回棧中元素個數
{
	char *p = l.top;  // 定義一個指針,賦值爲棧頂指針
	int length = 0;

	while(p != l.base)  // 若不等於棧底指針,則繼續循環
	{
		length++;  
		p++; // 繼續循環
	}
	return length;  // 返回棧中元素個數
}

<pre snippet_file_name="blog_20131121_1_5963388" code_snippet_id="76772">
<pre snippet_file_name="blog_20131121_1_53660" code_snippet_id="76772">











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