栈的链表实现

数据结构与算法分析——c语言描述 第三章  栈

就是链表的增加删除都只能是第一个元素。没什么特别的。


stack.h

typedef int ElementType;
#ifndef _stack_h
#define _stack_h

struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode Stack;

int IsEmpty(Stack s);
Stack CreatStack();
void DisposeStack(Stack s);
void MakeEmpty(Stack s);
void Push(ElementType X, Stack s);
ElementType Top(Stack s);
void Pop(Stack s);

#endif


stack.c

#include"stack.h"
#include<stdlib.h>
#include"fatal.h"

struct Node{
	ElementType Element;
	PtrToNode   Next;
};

int IsEmpty(Stack s) {
	return s->Next == NULL;
}

Stack CreatStack() {
	Stack s;
	s = malloc(sizeof(struct Node));
	if (s == NULL)
		Error("out of space");
	s->Next = NULL;
	return s;
}

void DisposeStack(Stack s) {
	MakeEmpty(s);
	free(s);
}

void MakeEmpty(Stack s) {
	if (s == NULL)
		Error("Must use CreateStack first");
	else
		while (!IsEmpty(s)) {
			Pop(s);
		}
}

void Push(ElementType X, Stack s) {
	PtrToNode tmpCell;
	tmpCell = malloc(sizeof(struct Node));
	if (tmpCell == NULL) {
		Error("out of space");
	}
	else {
		tmpCell->Element = X;
		tmpCell->Next = s->Next;
		s->Next = tmpCell;
	}
}

ElementType Top(Stack s) {
	if (!IsEmpty(s))
		return s->Next->Element;
	Error("Empty stack");
}

void Pop(Stack s) {
	PtrToNode firstCell;
	if(IsEmpty(s))
		Error("Empty stack");
	else {
		firstCell = s->Next;
		s->Next = firstCell->Next;
		free(firstCell);
	}
}


main.c

#include"stack.h"
#include<stdio.h>
int main() {
	Stack s = CreatStack();
	Push(233333, s);
	printf("%d", Top(s));
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值