C堆栈实现

/*
 ============================================================================
 Name        : 堆栈(堆栈,堆栈,堆中开的栈空间,所以叫堆栈)
 Author      : Swair Fang
 Version     : 1.1
 Copyright   : by Swair Fang
 Description : 堆栈实现, Ansi-style
 功能:
	1.初始化堆栈
	2.压栈
	3.出栈
	4.查看栈顶
	5.清空一个栈
	6.打印栈
 ============================================================================
 */
#include 
   
   
    
    
#include 
    
    
     
     

#ifndef _Stack_H
#define _Stack_H
typedef int ElementType;

//构建节点
typedef struct Node
{
	ElementType Element;
	struct Node *Next;
} *Stack,*Position;

//1.初始化一个堆栈
Stack Create()
{
	Stack S=(Stack)malloc(sizeof(struct Node));
	if(S==NULL)
		printf("Out of space!!!");
	S->Next=NULL;
	return S;
}
//2.压栈
void Push(Stack S,ElementType X)
{
	Position TmpCell=(Position)malloc(sizeof(struct Node));
	if(TmpCell==NULL)
	{
		printf("Out of space!!!");
		exit(1);
	}
	TmpCell->Element=X;
	TmpCell->Next=S->Next;
	S->Next=TmpCell;

}
//3.出栈
ElementType Pop(Stack S)
{
	if(S==NULL||S->Next==NULL)
		printf("Empty stack");
	else
	{
		Position FirstCell=S->Next;
		S->Next=S->Next->Next;
		ElementType X=FirstCell->Element;
		free(FirstCell);
		return X;
	}
}
//4.查看栈顶
ElementType Top(Stack S)
{
	if(S==NULL||S->Next==NULL)
		printf("Empty stack");
	else
	{
		return S->Next->Element;
	}
}
//5.清空一个栈
void MakeEmpty(Stack S)
{
	if(S==NULL)
		printf("Must use CreateStack first");
	else
	{
		Position P,Tmp;
		P=S->Next;
		S->Next=NULL;
		while(P!=NULL)
		{
			Tmp=P->Next;
			free(P);
			P=Tmp;
		}
	}

}
//6.打印栈
void PrintStack(Stack S)
{
	if(S->Next==NULL)
		printf("链表为空\n");
	else
	{
		Position P=S->Next;
		while(P!=NULL)
		{
			char *cp=(char*)P;
			printf("0x%x: %d\n  ",cp,P->Element);
			P=P->Next;
		}
		printf("\n");
	}
}
#endif/*_Stack_H*/
int main()
{
	Stack S=Create();
	printf("将1-10依次压栈\n");
	int i=0;
	while(i++<10)
		Push(S,i);
	PrintStack(S);
	printf("出栈第1次后\n");
	Pop(S);
	printf("出栈第2次后\n");
	Pop(S);
	PrintStack(S);
	MakeEmpty(S);
	exit(0);
}

    
    
   
   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值