栈的基本操作(顺序栈)
数据结构中栈的更多基本操作(用顺序栈实现)
1.栈的定义与初始化
- 栈的定义
struct Stack{
int *data; // 动态数组
int maxlen;
int top; // 栈顶指针
//top == -1代表空栈,top == maxlen-1代表满栈
};
typedef struct Stack SeqStack;
由于是顺序结构,定义时就必须确定栈的最大长度maxlen,改用动态数组的形式可以更灵活的操控内存
- 栈的初始化
SeqStack* Init(int maxl){
/*初始化栈*/
SeqStack* head = new SeqStack;
head->data = new int[maxl];
head->maxlen = maxl;
head->top = -1; // 空栈时,栈顶指针为-1
return head;
}
2.栈的销毁与清除
- 栈的销毁
void Destroy(SeqStack* head){
/*销毁栈,销毁后栈不存在*/
if(head == NULL){
return;
}
delete head->data;
delete head;
}
- 栈的清除
void Clear(SeqStack* head){
/*清除栈,清除后栈仍热存在,为空栈*/
if(head == NULL){
return;
}
head->top = -1;
}
注意:栈的销毁和栈的清除的主要区别就在于,销毁后,栈在内存空间不复存在,他被彻底地从内存中删除了。而清除操作后。栈为空,栈仍然存在于内存空间中
3.压栈与弹栈
- 压栈操作
int Push(SeqStack* head, int Elem){
/*压栈,若压栈操作完成后栈满返回0,未操作时栈已满
返回-1,否则,返回1*/
if(head == NULL || head->top == head->maxlen-1){
return -1;
}
head->data[++head->top] = Elem;
if(head->top == head-<maxlen - 1){
return 0;
}
else{
return 1;
}
}
- 弹栈操作
int Pop(SeqStack* head, int* ELem){
/*弹栈,若空栈,则返回0(操作前为空栈返回-1)
否则,返回1*/
if(head == NULL || head->top == -1){
return -1;
}
*Elem = head->data[head->top--];
if(head->top == -1){
return 0;
}
else{
return 1;
}
}
4.其他基本操作
- 判断栈是否为空
int IsEmpty(SeqStack * head){
/*判断一个栈是否为空:若为空则返回1*/
if(head == NULL || head->top == -1){
return 1;
}
else{
return 0;
}
}
- 求栈长
int Length(SeqStack* head){
/*返回栈的长度(数据量)*/
if(head == NULL){
return 0;
}
return head->top+1;
}