线性表----链接栈的基本操作

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

/**
 *@Name:线性表--栈--链接栈 
 *@Description:链接栈的创建,元素的入栈、出栈取栈顶元素基本操作。
 *@Author:Freedoman
 *@Date: 2014-8-8
 */
 
struct Node     					/*栈结点类型*/
{
	int data;						/*数据域*/ 
	struct Node * next;			/*指针域*/
};
typedef struct Node * PNode;
 

/*函数声明*/
PNode createNullLinkedStack();
int isNullLinkedStack(PNode top);
int pushElement(PNode top); 
int popElement(PNode top);
int loadTopElement(PNode top);
void printStack(PNode top);

/*---------------创建一个空栈-----------*/
PNode createNullLinkedStack(){
	printf("创建一个空栈\n");
	PNode top = (PNode)malloc(sizeof(Node));
	if(top == NULL){
		printf("创建失败!\n");	
	}	
	else{
		top->next = NULL;
		top->data = -1;
		printf("创建成功!\n");
	}
	return top;
}

/*--------------判断当前栈是否为空------------*/
int isNullLinkedStack(PNode top)
{
	if(top->next == NULL){
		printf("空栈!\n");
		return 1;
	}else{
		printf("非空栈!\n");
		return 0;
	}
}

/*---------------元素入栈(限定栈顶操作)----------------*/ 
int pushElement(PNode top){
	printf("元素入栈\n");
	int data;
	PNode p = (PNode)malloc(sizeof(PNode));
	if(p == NULL){
		printf("申请内存失败!\n");
		return 0; 
	}
	else{
		printf("请输入元素>>>");
		scanf("%d",&data);	
		p->data = data;
		p->next = top->next;
		top->next = p; 
		printf("进栈成功!\n");
		printStack(top);
		return 1;
	}
}

/*----------元素出栈(限定栈顶操作)-----------*/
int popElement(PNode top){
	printf("元素出栈\n");
	if(isNullLinkedStack(top)){
		printf("下溢!\n");
		return 0;
	}else{
		top->next = top->next->next;
		printf("出栈成功!\n");
		printStack(top);
		return 1; 
	}
}

/*---------------取栈顶元素-------------*/
int loadTopElement(PNode top){
	if(!isNullLinkedStack(top)){
		printf("当前栈顶元素>>>>%d\n",top->next->data);
		return (top->next->data);
	}
	else{
		return 0;
	}
}

/*-----------自顶至底打印当前栈元素----------*/ 
void printStack(PNode top){
	PNode p;
	printf("打印[");
	do{
		printf(" %d ",top->data);
		top = top->next;
	}while(top != NULL); 
	printf("]\n");
}

int main(void)
{
	int input; 
	PNode top = NULL;
	printf("\n------链接栈的基本操作------\n");
	while(1){
		printf("\n 1_创建一个空栈\n 2_判断当前栈是否为空\n 3_元素入栈\n");
		printf(" 4_元素出栈\n 5_取栈顶元素\n 6_自顶至底打印当前栈元素\n");
		printf("\n请选择>>>");
		scanf("%d",&input);
		switch(input){
			case 1 : top = createNullLinkedStack();break;
			case 2 : isNullLinkedStack(top);break;
			case 3 : pushElement(top);break;
			case 4 : popElement(top);break;
			case 5 : loadTopElement(top);break;
			case 6 : printStack(top);break;
			default : printf("当前输入有误!\n");
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值