栈有什么特点呢?
栈中的元素先进后出。常见的栈的操作有出栈、压栈、删除等。
在压栈时,需要检查栈是否已满;
在出栈时,需要检查栈是否已空。
用数组模拟栈的实现如下:
#define _STACKSIZE 100
//栈的声明
struct stack{
int stk[_STACKSIZE];
int top;
}
//栈的初始化
void ini_stack(struct stack *s){
memset(s->stk,0,sizeof(s->stk));//用menset把栈初始化为0
s->top=-1;
}
//压栈
int push(struct stack *s,int data){
//判断栈是否满
if(s->data==_STACKSIZE-1){
printf("the stack is full.\n");
return 1;
}
++(s->top);
s->stk[s->top]=data;
return 0;
}
//出栈
int pop(struct stack *s){
int temp;
//判断是否为空
if(s->data<0){
printf("the stack is empty.\n")
return -1;
}
temp=s->stk[s->top];
--(s->top);
return temp;
}
亦可以用链表实现栈,后续补上。
//栈的声明
struct stack{
ElementType data;
struct stack *next;
}
//压栈
int push(struct stack *s,ElementType edata){
//链表栈如需判满
struct stack *newstack = new stack;
newstack->data=edata;
newstack->next=s->next;
s->next=newstack;
return 1;
}
//出栈
//s 为栈顶指针
int pop(struct stack *s){
//判空
if(s->next==NULL)
return 0;
struct stack *sTemp;
//当前栈顶指针赋值非sTemp,他们指向同一块内存区域
sTemp=s;
//栈顶指针指向上一个元素
s=sTemp->next;
//清除栈顶指针指向的内存区域
free(sTemp);
return 1;
}