栈的顺序存储实现
- 包含:存数据的数组,栈顶“指针”(存放栈顶的位置,是数组下标)0-maxsize-1
最大容量 maxsize - 操作:push 入栈 pop出栈
//栈的顺序存储实现==顺序栈
/*操作:isempty,isfull,push,top,pop,CreatStack*/
/*因为c没有bool类型,所以凡是涉及到布尔的操作,都用int啦*/
#include<stdio.h>
#include<stdlib.h>
typedef struct SNode* Stack;
struct SNode
{
int *data;//ElementType 为int;data为存放数据的数组
int top;// ElementType 为int
int MaxSize;
};
Stack CreatStack(int maxsize)
{
Stack s=(Stack)malloc(sizeof(struct SNode));
s->data=(int*)malloc(maxsize*sizeof(int));
s->top=-1;
s->MaxSize=maxsize;
return s;
}
int isfull(Stack s)
{
if(s->top+1==s->MaxSize) return 1;
else return 0;
}
int isempty(Stack s)
{
if(s->top==-1) return 1;
else return 0;
}
Stack push(Stack s,int x)
{
s->data[++s->top]=x;
return s;
}
int pop(Stack s)//弹出并取得值
{
if(!isempty(s)) return s->data[s->top--];
else printf("false");
}
int top(Stack s)
{
if(!isempty(s)) return s->data[s->top];
else printf("false");
}
int main()//test
{
int maxsize=100;
int tmp;
Stack s=CreatStack(maxsize);
printf("please enter stack until -1\n");
while(1)
{
scanf("%d",&tmp);
if(tmp==-1) break;
else push(s,tmp);
}
printf("%d ",pop(s));
printf("%d ",pop(s));
printf("%d ",pop(s));
}
栈的链表存储实现
- 注意:链表存储实现中入栈位置位于链表头部,顺序存储实现中在数组末尾push
结点组成:data;next指针域
操作实现:在链表的表头插入来实现push,删除表顶端元素实现pop,top操作只是返回表顶端元素,空栈时只有一个头节点。
//链栈 struct 为数据域+指针域
//对比:顺序栈 struct为数据数组,栈顶指针top,最大容量 顺序栈的容量可以不定
#include<stdio.h>
#include<stdlib.h>
typedef struct SNode *Stack;
struct SNode{
int data;
Stack next;
};
Stack CreatStack()//带头结点
{
Stack s=(Stack)malloc(sizeof(struct SNode));
s->next=NULL;
return s;
}
int isempty(Stack s)
{
if(s->next==NULL) return 1;
else return 0;
}
Stack push(Stack s,int x)//头插
{
Stack tmp=malloc(sizeof(struct SNode));
tmp->data=x;
tmp->next=s->next;
s->next=tmp;
return s;
}
int pop(Stack s)
{
int x;
Stack tmp;
if(isempty(s)) printf("false");
else
{
tmp=s->next;
x=tmp->data;
s->next=tmp->next;
free(tmp);
return x;
}
}
int main()//test
{
int tmp;
Stack s=CreatStack();
printf("please enter stack until -1\n");
while(1)
{
scanf("%d",&tmp);
if(tmp==-1) break;
else push(s,tmp);
}
printf("%d ",pop(s));
printf("%d ",pop(s));
printf("%d ",pop(s));
}
c++STL库 stack操作集
头文件 #include
构造 stack s;
s.empty() 堆栈为空则返回真
s.pop() 移除栈顶元素
s.push() 在栈顶增加元素
s.size() 返回栈中元素数目
s.top() 返回栈顶元素