C Language 栈和队列 - 链栈

Posted Adorable_Rocy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C Language 栈和队列 - 链栈相关的知识,希望对你有一定的参考价值。

链栈和单链表区别是,栈的弹出元素是在头顶弹出,所以后一个元素的next域是前一个元素的地址,所以在入栈的时候格外的注意一下就行

  • 创建单链栈:
typedef char ElemType;
typedef struct linknode {
	ElemType data;
	struct linknode *next;
} LinkNode;
  • 初始化单链栈算法:
void initLStack(LinkNode *&s) {
	s = new LinkNode;
	s->next==NULL;
}
  • 销毁链栈算法:
void destroyLStack(LinkNode *&s) {
	LinkNode *pre=s,*p=s->next;
	while(p!=NULL) {
		free(pre);
		pre=p;
		p=pre->next;
	}
	free(pre);
}
  • 进栈算法:
void pushLStack(LinkNode *&s,ElemType e) {
	LinkNode *p;	//链栈没有栈满的情况
		p=new LinkNode;
	
	p->data = e; 
	p->next=s->next;
	s->next=p;
}

  • 出栈算法:
bool popLStack(LinkNode *&s,ElemType &e) {
	LinkNode *p;
	if(s->next==NULL)
		return false;

	p=s->next;	
	e=p->data;
	s->next=p->next;
	free(p);
	return true;
}

就是从最后一个逆序出栈,直到栈空为止。

  • 取栈顶元素算法:
bool getLStackTop(LinkNode *&s,ElemType &e) {
	if(s->next==NULL)
		return false;
		
	e=s->next->data;
	return true;
}
  • 初始化进栈以及出栈操作结果如下:

以上是关于C Language 栈和队列 - 链栈的主要内容,如果未能解决你的问题,请参考以下文章

链栈和链队列的建立及基本操作

(王道408考研数据结构)第三章栈和队列-第二节:队列基本概念顺序栈和链栈基本操作

C Language 栈和队列 - 链队列

C Language 栈和队列 - 顺序队列

C Language 栈和队列 - 顺序栈

(王道408考研数据结构)第三章栈和队列-第一节:栈基本概念顺序栈和链栈基本操作