栈
欢迎访问我的主页www.hh-yzm.com获取代码
栈是什么
栈(Stack)在数据结构中指的是一种FILO(First in Last out)表,即数据存放是先进后出,是只能在表尾进行插入与删除的线性表。栈只有一个出入口,允许进行出栈,入栈操作。栈有五个常用操作:获取栈顶元素,在栈顶增加元素(入栈),(抛出栈顶元素)出栈,获取栈大小,判断栈是够为空栈。
栈的基本操作
栈的数据结构
利用单向链表来创建一个栈.
struct Stact{
int data;
struct Stact *next;
};
对于单向链表我们采用尾插法来创建,但是对于栈链表如果采用尾插法,入栈需要从头节点遍历至尾节点,出栈(删除栈尾元素)也要遍历一遍并且需要获得前一个节点。但是如果采用头插法,每次只需要维护头部数据,将省去遍历的步骤。
栈的初始化
//初始化一个空栈,返回栈的头节点
struct Stack *initStack()
{
Stack* top;
top=(struct Stack*)malloc(sizeof(Stack));
top->next=NULL;
return top;
}
获取栈的大小
int stackSize(struct Stack *top)
{
int cnt=0;
while(top->next)
{
top=top->next;
cnt++;
}
return cnt; //返回Stack所含元素的个数
}
获取栈顶元素
//抛出栈顶元素
int topStack(struct Stack *top)
{
//栈空
if(!emptyStack(top)) {printf("Error!\n"); return -1;}
return top->next->data;
}
入栈
//将data入栈
void pushStack(struct Stack *top,int data)
{
struct Stack *node;//创建一个节点
node=(struct Stack*)malloc(sizeof(struct Stack));
node->data=data;
//将node插入到top头节点之后
node->next=top->next;
top->next=node;
}
出栈
//出栈操作
void popStack(struct Stack *top)
{
//栈为空
if(!emptyStack(top)) return;
//栈不为空,node为栈顶元素,删除该元素
struct Stack *node;
node=top->next;
top->next=node->next;
free(node);
}
练习
利用栈计算四则运算 + - * / ()
浙公网安备 33010602011771号