c语言写栈,C语言写栈

文章目录

一、栈的定义

栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,所以栈又被称为后进先出的线性表。

72d8acea164794c56dd8e337656244f7.png

二、栈的基本操作

(一) 栈的顺序存储结构(基于数组)

栈的创建

typedef struct

{

int data[N];

int top;

}Sqstack;

栈的初始化

void initSqStack(Sqstack *st){

st->top = -1;

}

入栈

void Push(Sqstack *S, int n){

if(S->top == N - 1){

printf("栈已满!\n");

return;

}

S->top++;

S->data[S->top] = n;

}

出栈

void Pop(Sqstack *S, int *x){

if(S->top == -1){

return;

}

*x = S->data[S->top];

}

栈的遍历输出

void Print(Sqstack *S){

while(S->top > -1){

printf("%d\n", S->data[S->top--]);

}

}

完整代码

#include

#define N 5

typedef struct

{

int data[N];

int top;

}Sqstack;

void initSqStack(Sqstack *st){

st->top = -1;

}

void Push(Sqstack *S, int n){

if(S->top == N - 1){

printf("栈已满!\n");

return;

}

S->top++;

S->data[S->top] = n;

}

void Print(Sqstack *S){

while(S->top > -1){

printf("%d\n", S->data[S->top--]);

}

}

void Pop(Sqstack *S, int *x){

if(S->top == -1){

return;

}

*x = S->data[S->top];

}

int main()

{

int x;

Sqstack s;

initSqStack(&s);

Push(&s, 1);

Push(&s, 2);

Push(&s, 3);

Push(&s, 4);

Push(&s, 5);

Pop(&s, &x);

printf("出栈的元素:%d\n", x);

Print(&s);

return 0;

}

(二)栈的链式存储结构(基于链表)

typedef struct node{ //定义结点

int data;

node *next;

}Node, *pNode;

typedef struct{ //定义栈

pNode top; //栈顶

int count;

}LinkStack,*pLinkStack;

栈的初始化

void init(pLinkStack s){

s->top = NULL;

s->count = 0;

}

判断是否为空栈

int isEmpty(pLinkStack s){

if(s->top == NULL){

return 1;

} else {

return 0;

}

}

入栈操作

void push(pLinkStack s, int a){

pNode p = (pNode)malloc(sizeof(Node));

p->data = a;

p->next = s->top;

s->top = p;

s->count++;

}

出栈操作

int pop(pLinkStack s){

pNode p = s->top;

int a = p->data;

s->top = p->next;

s->count--;

free(p);

return a;

}

获取栈顶元素

int ding(pLinkStack s){

return s->top->data;

}

获取栈的大小

int length(pLinkStack s){

return s->count;

}

主函数:

int main(){

int len, top, t;

LinkStack s;

init(&s);

push(&s, 1);

push(&s, 3);

push(&s, 5);

push(&s, 7);

top=ding(&s);

len=length(&s);

printf("top: %d, len: %d\n", top, len);

while(!isEmpty(&s)){

t = pop(&s);

printf("删除的顶部元素为:%d\n", t);

}

system("pause");

}

完整代码:

#include

#include

#include

typedef struct node{ //定义结点

int data;

node *next;

}Node, *pNode;

typedef struct{ //定义栈

pNode top; //栈顶

int count;

}LinkStack,*pLinkStack;

void init(pLinkStack s){

s->top = NULL;

s->count = 0;

}

int isEmpty(pLinkStack s){

if(s->top == NULL){

return 1;

} else {

return 0;

}

}

void push(pLinkStack s, int a){

pNode p = (pNode)malloc(sizeof(Node));

p->data = a;

p->next = s->top;

s->top = p;

s->count++;

}

int pop(pLinkStack s){

pNode p = s->top;

int a = p->data;

s->top = p->next;

s->count--;

free(p);

return a;

int ding(pLinkStack s){

return s->top->data;

}

int length(pLinkStack s){

return s->count;

}

int main(){

int len, top, t;

LinkStack s;

init(&s);

push(&s, 1);

push(&s, 3);

push(&s, 5);

push(&s, 7);

top=ding(&s);

len=length(&s);

printf("top: %d, len: %d\n", top, len);

while(!isEmpty(&s)){

t = pop(&s);

printf("删除的顶部元素为:%d\n", t);

}

system("pause");

}

三、总结

栈的思想在很多题中都会用到,所以要熟练运用栈解决问题。

标签:写栈,return,int,top,C语言,pLinkStack,data,void

来源: https://blog.csdn.net/weixin_50990189/article/details/115639254

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值