#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;
}
线性表----链接栈的基本操作
最新推荐文章于 2020-03-27 15:58:13 发布