這是最近實訓時寫的關於棧的一些操作,保存下來:
#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">