数据结构:顺序栈的建立、初始化、入栈、出栈、输出(C语言)

大一学C语言的时候还没觉得有啥难的,直到现在学了数据结构。。。

还是自己技术不过关,理解不到位,还需要努力。。。

 

下面贴关于顺序栈的代码:

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

//存储结构定义
#define STACK_INIT_SIZE 100//存储空间初始分配量
#define STACKINCREATEMENT 10//存储空间分配增量
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int status;
typedef struct{
int *base;
int *top;
int stacksize;
}sqstack;

//初始化

status initstack(sqstack &s)
{
	s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
	if(!s.base)
		exit(OVERFLOW);
	s.top=s.base;
	s.stacksize=STACK_INIT_SIZE;
	return OK;
}

//入栈

status push(sqstack &s,int e){
if(s.top-s.base>=s.stacksize)//栈满
{
	s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREATEMENT)*sizeof(int));//增加存储空间

    if(!s.base)
    exit(OVERFLOW);

s.top=s.base+s.stacksize;
s.stacksize = s.stacksize + STACKINCREATEMENT;
}
*s.top=e;
*s.top++;
return OK;
}

//出栈

status pop(sqstack &s,int &e){ //&e??
if(s.base==s.top)//栈空
return ERROR;

e=*(s.top-1);  //删除栈顶元素,指针top减一
*s.top--;
return OK;
}

//获取栈顶元素
status gettop(sqstack &s,int &e){
	if(s.base==s.top)
		return ERROR;
e=*(s.top-1);
return OK;
}

//输出栈中元素
status printstack(sqstack &s){
	if(s.base==s.top){
		printf("空栈\n");
		return ERROR;
	}
	else
		printf("栈的内容为:");

		for(;s.base!=s.top;s.base++){ //for(;s.base!=s.top;s.top--)
			printf("%d  ",*s.base);}  //printf("%d  ",*(s.top-1));

		return OK;
}



int main(){
sqstack s;
int x;//输入的数字
if(initstack(s))
printf("初始化成功 !");

while(1){
printf("请输入要进行的操作:\n");
printf("1.进栈\n 2.出栈\n 3.获取栈顶元素\n 4.打印\n 0.退出\n");

scanf("%d",&x);
if(x==0)
break;
switch(x)
{
case 0:break;
case 1:
	int pushnumber;
	printf("请输入要进栈的元素:");
	scanf("%d",&pushnumber);
	if(push(s,pushnumber))
		printf("进栈成功\n");
	else
		printf("进栈失败\n");
	break;
case 2:
	int e;
	if(pop(s,e))
		printf("元素%d出栈\n",e);
	else
		printf("出栈失败\n");
	break;
case 3:
	if(gettop(s,e))
	printf("栈顶元素是 : %d\n",e);
	else
	printf("获得栈顶元素失败\n");
	break;
case 4:
	if(printstack(s))
		printf("打印完毕\n");
	break;
default:
	printf("您进行了误操作,请重试!\n");
	break;
}
}
return 1;
}

个人认为需要注意的方面有:

1.malloc函数、realloc函数、sizeof函数 需要搞明白

2.结构体的定义与具体语法

3.指针方面 我个人对于这方面还是不太明白,希望有大佬能指点一下

4.顺序栈的定义

 

 

运行结果:

 

希望大佬们提供宝贵的意见

  • 61
    点赞
  • 383
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
顺序栈是一种线性数据结构,它具有后进先出(LIFO)的特点。顺序栈的实现需要一个数组和一个指向栈顶元素的指针。以下是顺序栈初始化、判断栈空、入栈出栈操作的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 typedef struct Stack { int data[MAX_SIZE]; int top; } Stack; // 初始化栈 void init(Stack *s) { s->top = -1; } // 判断栈空 int is_empty(Stack *s) { return s->top == -1; } // 入栈 void push(Stack *s, int x) { if (s->top == MAX_SIZE - 1) { printf("Error: stack overflow\n"); exit(1); } s->data[++s->top] = x; } // 出栈 int pop(Stack *s) { if (is_empty(s)) { printf("Error: stack underflow\n"); exit(1); } return s->data[s->top--]; } int main() { Stack s; init(&s); push(&s, 1); push(&s, 2); push(&s, 3); while (!is_empty(&s)) { printf("%d ", pop(&s)); } printf("\n"); return 0; } ``` 在上面的代码中,我们使用了一个结构体来表示栈,其中包含一个整型数组和一个指向栈顶元素的整型指针。在初始化操作中,我们将栈顶指针初始化为-1,表示栈为空。在入栈操作中,我们首先判断栈是否已满,如果满了则输出错误信息并退出程序,否则将元素插入到栈顶。在出栈操作中,我们首先判断栈是否为空,如果为空则输出错误信息并退出程序,否则弹出栈顶元素并返回。在主函数中,我们初始化一个栈,然后依次将元素1、2、3入栈,最后将栈中的元素依次弹出并输出

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

九洲带鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值