4.18 顺序栈ADT实现

本文详细介绍了使用C语言实现的序列栈(SeqStack)数据结构,包括初始化、元素入栈(push)、出栈(pop)、检查栈是否为空、满以及清空栈和销毁栈的操作。并通过示例展示了栈的使用过程。
摘要由CSDN通过智能技术生成
// seq_stack.h -- header of sequence stack
#ifndef __SEQ_STACK_H__
#define __SEQ_STACK_H__

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 8


typedef int datatype;

typedef struct seq_stack{
	datatype data[MAX];
	int top;
}sstack_t, * psstack_t;

// stack init
psstack_t init();
// push
void push(psstack_t, datatype);
// pop
void pop(psstack_t, datatype*);
// check if empty
bool isEmpty(psstack_t);
// check if full
bool isFull(psstack_t);
// clear
void clear(psstack_t);
// destroy
void destroy(psstack_t*);
// show
void show(psstack_t);
#endif // !__SEQ_STACK_H__
// seq_stack.c -- implement of sequence stack
#include "seq_stack.h"

// stack init
psstack_t init(){
	psstack_t s = (psstack_t)malloc(sizeof(sstack_t));
	if(!s)
		return NULL;
	else{
		s->top = -1;
		return s;
	}
}

// push
void push(psstack_t s, datatype d){
	if(!s)
		return;
	else if(!isFull(s)){
		s->data[++s->top] = d;
		return;
	}
}

// pop
void pop(psstack_t s, datatype* pd){
	if(!s)
		return;
	else if(!isEmpty(s)){
		*pd = s->data[s->top--];
		return;
	}
}

// check if empty
bool isEmpty(psstack_t s){
	if(!s)
		return false;
	else
		return (s->top == -1);
}

// check if full
bool isFull(psstack_t s){
	if(!s)
		return false;
	else
		return (s->top == MAX-1);
}

// clear
void clear(psstack_t s){
	if(!s)
		return;
	else{
		s->top = -1;
		return;
	}
}

// destroy
void destroy(psstack_t* ps){
	if(!ps)
		return;
	else if(!*ps)
		return;
	else{
		free(*ps);
		*ps = NULL;
		return;
	}
}

// show
void show(psstack_t s){
	if(!s)
		return;
	else if(isEmpty(s))
		return;
	else{
		for(int i = s->top; i != -1; i--)
			printf("%-4d", s->data[i]);
		putchar(10);
		return;
	}
}
#include "seq_stack.h"
#include <time.h>

int main(){
	psstack_t s = init();
	push(s, 1);
	push(s, 2);
	push(s, 3);
	push(s, 4);
	push(s, 5);
	show(s);
	clear(s);
	for(int i = 0; i < 10; i++)
		push(s, rand()%100);
	show(s);
	datatype ret;
	pop(s, &ret);
	printf("pop: %d\n", ret);
	show(s);
	destroy(&s);
	return 0;
}
5   4   3   2   1   
92  86  35  93  15  77  86  83  
pop: 92
86  35  93  15  77  86  83  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值