(c语言)堆栈链式存储源码(包含测试)

本试验取材于姥姥《数据结构(第2版)》.
堆栈的链式存储主要是在链表的基础上实现,大家千万不要觉得恐惧,认真的敲,认真的实现,其实一点都不能!加油,努力干,头发会有的!

//堆栈的链式存储
#include<stdio.h>
#include<stdlib.h>
#define ERROR -1
typedef int Position;
typedef struct SNode *PtrToSNode;
typedef int ElementType;
struct SNode{
	ElementType Data;
	PtrToSNode Next;
};
typedef PtrToSNode Stack;
Stack CreateStack(){
	Stack S = malloc(sizeof(struct SNode));
	S->Next = NULL;
	return S;
}//构建一个堆栈的头结点,返回该节点指针
int IsEmpty(Stack S){
	return (S->Next == NULL);
}//判断堆栈S是否为空,若是返回True,则返回False
int Push(Stack S,ElementType X){
	PtrToSNode TmpCell;
	TmpCell = (PtrToSNode )malloc(sizeof(struct SNode));
	TmpCell->Data = X;
	TmpCell->Next = S->Next;
	S->Next = TmpCell;
	return 1;
}
ElementType Pop(Stack S){
	PtrToSNode FirstCell;
	ElementType TopElem;
	if(IsEmpty(S)){
		printf("stack is empty");
		return ERROR;
	}else{
		FirstCell = S->Next;
		TopElem = FirstCell->Data;
		S->Next = FirstCell->Next;
		free(FirstCell);
		return TopElem;
	}
}
//堆栈给数据插接点,不存在是否为满的情况!
int main()
{
	Stack S = CreateStack();
	int m;
	int empty = IsEmpty(S);
	if (empty)
		printf("Stack is Empty\n");
	else
		printf("Stack is not Empty\n");
	m = Push(S,1);
	m = Push(S,2);
	m = Push(S,3);
	m = Push(S,4);
	if(m){
		printf("push() is success!\n");
	}else{
		printf("push() is not success!\n");
	}
	m = Pop(S);
	m = Pop(S);
	if(m){
		printf("pop()'s element:%d\n",m);
	}else{
		printf("pop() is not success!\n");
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值