用c语言写一个栈

在这里插入图片描述
**栈( stack)是一种重要的线性结构,它是受限的线性表,是仅能在表的一端进行插入和删除运算的线性表,栈被广泛的运用到各种系统的程序设计中。
**
(1)通常称插入、删除的一端为栈顶,另一端称为栈底。
(2)当表中没有元素时称为空栈。
(3)栈为后进先出的线性表。
栈的修改是按熙后进先出的原则进行。每次删除(退栈)的总是当前栈中“最新”的元素,即最后插入(进栈)的元素,而最先插入的则是被放在栈的底部,要到最后才能删除。

栈的基本运算

在实际使用过程中,常用的栈的操作如下。

  1. InitStack(S):构造一个空栈S。
    (2) StackEmpty(S):判断是否为空栈。若S为空栈,则返回TRUE,香则返回 FALSE
  2. Stack Ful(S):判断是否为满栈。若S为满栈,则返回TRUE,否则返回 FALSE。
    4)push(S,x):进栈,若栈S不满,则将元素x插入S的的栈顶。
    5)pop(S):出栈。若栈S非空,则将S的栈顶元素删去,并返回元素。
    (6) Stack Top(S):取栈顶元素。若栈S非空,则返回栈顶元素,但不改变栈的状态

顺序栈的定义

顺序栈的定义和顺序表的定义一样,通常使用结构体定义顺序栈,记录栈顶坐标,从而操作栈实现各种功能

#define Stacksize 100 //假设与分配的栈空间最多为100个元素
typedef struct
{
	char date[Stacksize];//假设栈元素的数据类型为字符
	int top;//定义栈顶
}Seqstack;

注意:

(1)栈底位置是固定不变的,可设置在栈的任意一个端点。
(2)栈顶位置是随着进栈和出栈的操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶的位置。
在这里插入图片描述

链式栈

栈的链式存储结构称为链栈。链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。跟单链表一样,通常使用结构体实现链式栈的功能,结构体内一个量存储结点值,一个量存储指针,实现链式结构。就像单链表有头指针一样,也为链式栈定义头结点,以便对链式栈进行操作。

typedef struct stacknode//链式栈表结构
{
	char date;
	struct stacknode *next;//栈元素指针
}StackNode;
typedef struct 
{
	stackNode *top;//栈顶指针
}linkStack;

代码走起:

#include <stdio.h>
#include <stdlib.h>

#define len sizeof(node)//申请空间大小
//定义栈结构的结点
typedef struct stack_node {
	char element;
	struct stack_node *next;
} node;

typedef struct {
	node *top;
} stack;

//进栈函数
void push(stack *sp, char element) {
	node *np;
	//创建新节点
	np = (node *)malloc(len);
	np->element = element;
	//修改栈顶指针
	np->next = sp->top;
	sp->top = np;
}

//出栈函数
char pop(stack *sp) {
	node *np;//将要出栈的结点指针
	np = sp->top;
	char c;//栈顶元素值
	c = np->element;
	sp->top = np->next;
	free(np);
	np = NULL;
	return c;
}

//遍历输出函数
void read (stack sp) {
	stack temstack = {NULL};
	char tem;
	while (sp.top != NULL) {
		tem = pop(&sp);
		printf("%c\n", tem);
		push(&temstack, tem);
	}
	while (temstack.top != NULL) {
		tem = pop(&temstack);
		push(&sp, tem);
	}
}
int main() {
	stack s = {NULL};
	push(&s, 'a');
	push(&s, 'b');
	push(&s, 'c');
	read(s);
	return 0;
}

希望对大家有帮助哦
![

  1. 在这里插入图片描述

](https://img-blog.csdnimg.cn/20210118165831285.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5ODM4NjA3,size_16,color_FFFFFF,t_70)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落春只在无意间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值