2.1栈的顺序结构

参考《大话数据结构》:

环境:ubuntu16.04 vim

文件名称:sqstack.h sqstack.c main.c Makefile(放到同一个目录下)

实现功能:栈的初始化,入栈,出栈

1.sqstack.h头文件

#ifndef __SQSTACK_HEAD__
#define __SQSTACK_HEAD__

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

#define MAXSIZE 20
#define OK 0
#define ERROR -1
#define TRUE 1
#define FALSE 0

typedef int ElemType;
typedef int Status;

typedef struct
{
	ElemType data[MAXSIZE];
	int top;
}SqStack;

/*extern 是变量或函数的申明,告诉编译器在其它文件中找这个变量或函数的定义*/

/*
*初始化一个栈,让其栈顶元素下标为-1
*s	[IN, OUT]执行操作的栈
*/
extern void StackInit(SqStack *s);

/*
*插入新的栈顶元素
*s	[IN, OUT]执行操作的栈
*e	[IN]要插入栈顶的元素
*/
extern Status Push(SqStack *s, ElemType e);

/*
*若栈不空,则删除s的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
*s	[IN, OUT]执行操作的栈
*e	[IN, OUT]要删除的栈顶元素
*/
extern Status Pop(SqStack *s, ElemType *e);

#endif
2.sqstack.c文件

#include "sqstack.h"

/*初始化栈*/
void StackInit(SqStack *s)
{
	s->top = -1;		//初始化为空表
}

/*插入新的栈顶元素*/
Status Push(SqStack *s, ElemType e)
{
	if (s->top == MAXSIZE -1)	//栈满
	{
		return ERROR;
	}

	s->top++;	//栈顶指针增加一
	s->data[s->top] = e;	//将新插入元素赋值给栈顶空间
	return OK;
}

/*若栈不空,则删除s的栈顶元素,用e返回其值,并返回OK,否则返回ERROR*/
Status Pop(SqStack *s, ElemType *e)
{
	if (s->top == -1)
	{
		return ERROR;
	}
	*e = s->data[s->top];	//将要删除的栈顶元素赋值给e
	s->top--;	//栈顶指针减一
	return OK;
}
3.main.c主函数

#include "sqstack.h"

int main()
{
	SqStack s;
	//初始化栈
	StackInit(&s);

	//入栈
	if (Push(&s, 3))
	{
		printf("push failed!\n");
		return ERROR;
	}

	printf("s.data[s.top]:%d\n", s.data[s.top]);

	//出栈
	ElemType e = 0;
	if (Pop(&s, &e))
	{
		printf("pop failed!\n");
		return ERROR;
	}
	printf("e:%d\n", e);

	return OK;
}
4.Makefile文件

#Makefile for building programmings
OBJS=sqstack.o main.o
CC=gcc
CFLAGS=-Wall -g
TARGET=sqstack

TARGET:$(OBJS)
	$(CC) $(OBJS) -o $(TARGET)
sqstack.o:sqstack.c sqstack.h
	$(CC) $(CFLAGS) -c $< -o $@
main.o:main.c sqstack.h
	$(CC) $(CFLAGS) -c $< -o $@

.PHONY:clean
clean:
	rm *.o sqstack
5.执行结果



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值