C语言 栈的基础知识

基本概念

定义:只允许在表的一端进行插入,删除操作的线性表
允许操作的那一段叫做栈顶top
表中没有元素就是空栈。
特点:后进先出,先进后出
栈的基本操作:

  1. 插入
  2. 删除
  3. 测试为空
  4. 检验已满
  5. 出栈

构造原理

1.顺序存储

数组:STACK[0…M-1]
同时定义整型变量top来给出栈顶元素的位置。
上溢:top=M-;
下溢:top=-1;

1)初始化

void initStack()
{
	Top=-1;
}

2)测试是否为空

int isEmpty()
{
	return Top==-1;
}

3)测试是否已满

int isFull()
{
	return Top==MAXSIZE-1;
}

4)进栈

void push(ElemType s[],ElemType item)
{
	if(isFull())
		Error("Full Stack!");
	else 
		s[++Top]=item;
}

5)出栈

Elemtype pop(Elemtype s[])
{
	if(isEmpty())
		Error("Empty Stack!");
	else
		return s[Top--];
}

多栈共享连续空间(省略)

2.链式存储

线性链表
指针表示栈顶 top
栈为空时 top=NULL
插入删除始终在链表的头;

实现:
定义一个链栈:

struct node{
	ElemType data;
	struct node *link;
};
typedef struct node *Nodeptr;
typedef struct node Node;
Nodeptr Top;//栈顶

初始化为全局变量;
操作:
1)初始化

void initStack()
	Top=NULL;

2)测试为空

int isEmpty()
{
	return Top==NULL;
}

3)链表不可能满
4)进栈

void push(ElemType item)
{
	Nodeptr
	p=(Nodeptr)malloc(sizeof(Node));
	p->data=item;
	p->link=Top;
	Top=p;
}

5)出栈

Elemtype pop()
{
	Nodeptr p;
	ElemType item;
	if(isEmpty)
		Error("Empty Stack");
	else{
		p=Top;
		item=Top->data;
		Top=Top->link;
		free(p);
		return item;
		}
	}
}

链接:
例题1:表达式的计算,中缀表达式和后缀表达式的转化

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值