顺序栈的c和python实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、顺序栈是什么?

示例:栈是限定仅在表尾进行插入和删除操作的线性表,而顺序栈就是线性表顺序村粗结构的简化,只是限定了只能在表尾操作而已。

二、C代码实现

#include <stdio.h>
#define ERROR 0
#define OK 1
#define MAXSIZE 20
typedef int status;
typedef int sElemType;
typedef struct {
	sElemType data[MAXSIZE];
	int top;
}sqStack;

//进栈
status Push(sqStack *s, sElemType e){
	if (s->top == MAXSIZE-1){
		return ERROR;//栈已满 
	}
	s->data[++s->top]=e;
	return OK;
} 

status Pop(sqStack *s, sElemType *e){
	if (s->top == -1){
		return ERROR;//栈为空 
	}
	*e = s->data[s->top--];
	return OK;
}

sElemType GetTop(sqStack *s, sElemType *e){
	if (s->top == -1){
		return ERROR;
	}
	*e = s->data[s->top];
	return OK;
}

int StackLength(sqStack *s){
	if (s->top == -1){
		return ERROR;
	}
	int i = 0;
	int j = 0;//定义一个j用于保存栈的top指针的值 
	j = s->top;
	while (j != -1){
		j--;
		i++;
	}
	return i;
}

//验证
int main(int argc, char const *argv[]){
	sqStack s = {{1,2,3}, 2};
	printf("顺序栈的长度为%d\n", StackLength(&s));
	printf("获取栈顶的元素:");	
	int e;//获取栈顶的元素
	GetTop(&s, &e);
	printf("%d\n", e);
	printf("获取栈顶元素结束\n");
//	GetTop(&s, &e);
//	printf("获取栈顶元素结束%d \n",e); 
	Push(&s, 10);
	Push(&s, 100);
	Push(&s, 1000);
	printf("顺序栈的长度为%d\n", StackLength(&s));
	printf("获取栈的所有元素:");
	int sl = StackLength(&s);
	int i = 0;//计数器 
	for (i;i<sl;i++){
		Pop(&s, &e);
		printf("%d ",e); 
	}
	printf("\n");
	printf("获取栈的所有元素结束\n");
	return 0;
} 

运行结果

在这里插入图片描述

三、python 代码实现

# -*-coding:utf-8-*-


class sqStack:
    def __init__(self, MAXSIZE):
        self.MAXSIZE = MAXSIZE
        self.data = [None] * self.MAXSIZE
        self.top = -1

    def isempty(self):
        return self.top == -1

    def Push(self, item):
        if self.top == self.MAXSIZE - 1:
            return "sqStack is full."
        self.data[self.top+1] = item
        self.top += 1

    def Pop(self):
        if self.isempty():
            return "sqStack is empty"
        rs = self.data[self.top]
        self.top -= 1
        return rs

    def sqStackLength(self):
        return self.top + 1

    def display(self):
        # index = self.top
        # while index != -1:
        #     print(self.data[index], end=" ")
        #     index -= 1
        # print()
        for i in range(self.top+1):
            print(self.data[i], end=" ")
        print()


if __name__ == '__main__':
    s = sqStack(20)
    print(s.isempty())
    s.display()
    s.Push(1)
    s.Push(10)
    s.Push(100)
    s.display()
    print(s.Pop())
    s.display()

运行结果

在这里插入图片描述

四、总结

提示:栈其实就是线性表的特例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你抱着的是只熊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值