数据结构——栈的编程实现

定义:栈是一种只能在表的一端进行插入或删除操作的线性表

总结约定:
1.top总是指向栈顶元素,初始值为-1
栈空条件:top=-1
栈满条件:top=MaxSize-1
进栈操作:进栈时top增加1,既top++,再将元素入栈
出栈操作:先从top处将元素取出,再将top-1,既top–
//栈的顺序存储结构

#define MaxSize 10
typedef struct{
	ElemType data[MaxSize];
	int top; //top为栈顶
}sqstack;

//在顺序栈中实现栈的基本运算

//1.初始化栈initstack(&s)
void initstack(sqstack *&s){
	s=(sqstack *)macllo(sizeof(sqstacke));
	s->top=-1;
}

//2.销毁栈

void Destroystack(&s){
	free(s);
}

//3.判断栈是否为空stackEmpty(s)

bool stackEmpty(sqstack *s){
	return (s->top==-1);
}

//4.进栈push(&s,e)

bool push(sqstack *&s,ElemType e){
	if(s->top==MaxSize-1) return false;
	s->top++;
	s->data[s->top]=e;
	return true;
}

//5.出栈pop(&s,e)

bool pop(sqstack *&s,ElemType &e){
	if(s->top==-1) return false;
	e=s->data[s->top];
	s->top--;
	return true;
}

//6.取栈顶元素GetTop(s,&e)

bool GetTop(sqstack *s,ElemType &e){
	if(s->top==-1) return flase;
	e=s->data[s->top];
	return true;
}

栈的链式存储结构

链栈的四要素:
1.栈空条件:s->next=NULL
2.栈满:不考虑
3.进栈e操作:将包含e的结点插入到头节点后
4.退栈操作:取出头节点之后结点的元素并删除之
s->next=s->next->next

链栈的结构类型:

typedef strcut linknode{
	ElemTyep data;
	struct linknode *next;
}LinkStnode;

//链栈实现的基本运算
1.初始化栈initstack(&s)

void(LinkStnode *&s){
	s=(LinkStnode *)malloc(sizeof(linkstnode));
	s->next=NULL;
}

2.销毁栈Destroystack(&s)

void destroystack(LinkstNode *&s){
	LinkStnode *p=s,*q=s->next;
	while(q!=NULL){
	free(p);
	p=q;
	q=p->next;
	}
}

3.判断是否为空栈stackEmpty(s)

bool stackEmpty(LinkStnode *s){
	return (s->next==NULL);
}

4.进栈push(&s,e)

void push(LinkStnode *s,ElemType e){
	LinkStnode *p;
	p=(LinkStnode *)mallo(sizeof(LinkStnode));
	p->data=e;
	p->next=s->next;
	s->next=p;
}

5.出栈pop(&s,&e)

bool pop(LinkStnode *s,ElemType &e){
	LinkStnode *p;
	if(s->next==NULL) return flase;
	p=s->next;
	e=p->next;
	s->next=p->next;
	free(p);
	retrun true;
}

6.取出栈顶元素GetTop(&s,&e){

bool GetTop(LinkStnode *s,ElemType &e){
	if(s->next==NULL) return false;
	e=s->next->data;
	return true;
}
}

运算规则:后进先出

上一篇:数据结构(9)排序


下一篇:【原创】【基础】一文搞懂严蔚敏数据结构`SqList &L`和`SqList L`、`ElemType &e`和`ElemType e`