#include<stdio.h>
#include"LinkStack.cpp"
int main(void)
{
int a,b,c,f,i,x;
LinkStack L1;
L1=*Initsack();
while(1)
{
printf("\t\t**********************************************************\t\t\n");
printf("\t\t* * 链栈的代码应用\t\t\t\t\t\t*\n");
printf("\t\t* * 0.退出 \t\t\t\t\t\t*\n");
printf("\t\t* * 1.入栈 \t\t\t\t\t\t*\n");
printf("\t\t* * 2.出栈 \t\t\t\t\t\t*\n");
printf("\t\t* * 3.取栈顶元素\t\t\t\t\t\t*\n");
printf("\t\t* * 4.判断栈是否为空\t\t\t\t\t\t*\n");
printf("\t\t* * 5.求栈的深度\t\t\t\t\t\t*\n");
printf("\t\t* * 6.清空栈 \t\t\t\t\t\t*\n");
printf("\t\t* * 7.打印栈 \t\t\t\t\t\t*\n");
printf("\t\t**********************************************************\t\t\n");
printf("\n\n\n输入要进行的操作:");
scanf("%d",&a);
system("cls");
switch(a){
case 0:{
exit(0);
break;
}
case 1:{
printf("输入要入栈的元素的个数:");
scanf("%d",&x);
printf("\n\n\n输入要入栈的%d个元素:\n",x);
for(i=1;i<=x;i++)
{
scanf("%d",&b);
Push(&L1,b);
}
break;
}
case 2:{
printf("请输入要出站的个数:");
scanf("%d",&x);
for(i=1;i<=x;i++)
{
c=Pop(&L1,&b);
if(c==0)
{
printf("\n\n\n出栈错误(栈已为空)!\n\n\n");
break;
}
printf("\n出栈的元素为%d\n\n",b);
}
break;
}
case 3:{
c=GetTop(&L1,&b);
if(c==0)
{
printf("\n\n\n取栈顶元素错误!\n\n\n");
break;
}
printf("\n\n\n栈顶元素为%d\n\n\n",b);
break;
}
case 4:{
c=StackEmpty(&L1);
if(c==0)
{
printf("\n\n\n栈不为空!\n\n\n");
break;
}
else
printf("\n\n\n栈为空!\n\n\n");
break;
}
case 5:{
c=StackLenth(&L1);
printf("\n\n\n栈的深度为%d\n\n\n",c);
break;
}
case 6:{
ClearStack(&L1);
printf("\n\n\n栈已清空!\n\n\n");
break;
}
case 7:{
PrintStack(&L1);
break;
}
default :{
printf("\n\n\n系统暂无此功能!\n\n\n");
break;
}
}
printf("按任意键回车后继续........");
f=getch();
system("cls");
}
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define STACK_INITSIZE 10
#define STACK_INCREAMENT 2
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}LinkStack;
/*****************************链栈的基本操作定义*****************************/
LinkStack *Initsack() /**链栈的初始化**/
{
LinkStack *S;
S=(LinkStack *)malloc(sizeof(LinkStack));
S->next=NULL;
return S;
}
int Push(LinkStack *S,ElemType e) /**进栈操作**/
{
LinkStack *p;
p=(LinkStack *)malloc(sizeof(LinkStack));
p->data=e;
p->next=S->next;
S->next=p;
return OK;
}
int Pop(LinkStack *S,ElemType *e) /**出栈操作**/
{
LinkStack *p;
if(S->next==NULL)
return ERROR;
p=S->next;
*e=p->data;
S->next=p->next;
free(p);
return OK;
}
int GetTop(LinkStack *S,ElemType *e) /**取栈顶元素**/
{
LinkStack *p;
if(S->next==NULL)
return 0;
p=S->next;
*e=p->data;
return OK;
}
int StackEmpty(LinkStack *S) /**判断链栈是否为空**/
{
if(S->next==NULL)
return 1;
else
return 0;
}
int StackLenth(LinkStack *S) /**判断链栈深度**/
{
int a=0;
LinkStack *p;
p=S->next;
while(p!=NULL)
{
a++;
p=p->next;
}
return a;
}
int ClearStack(LinkStack *S) /**清空栈**/
{
LinkStack *p,*top;
top=S->next;
S->next=NULL;
while(top!=NULL)
{
p=top;
top=top->next;
free(p);
}
}
int PrintStack(LinkStack *S) /*打印栈*/
{
int a;
a=StackLenth(S);
printf("\n\n\n\n栈中共有%d个元素:\n\n\n\n",a) ;
LinkStack *p;
p=S->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;
}
}
//int main(void)
// {
// int a,b,c,f,i,x;
// LinkStack L1;
// L1=*Initsack();
// while(1)
// {
// printf("\t\t**********************************************************\t\t\n");
// printf("\t\t* * 链栈的代码应用\t\t\t\t\t\t*\n");
// printf("\t\t* * 0.退出 \t\t\t\t\t\t*\n");
// printf("\t\t* * 1.入栈 \t\t\t\t\t\t*\n");
// printf("\t\t* * 2.出栈 \t\t\t\t\t\t*\n");
// printf("\t\t* * 3.取栈顶元素\t\t\t\t\t\t*\n");
// printf("\t\t* * 4.判断栈是否为空\t\t\t\t\t\t*\n");
// printf("\t\t* * 5.求栈的深度\t\t\t\t\t\t*\n");
// printf("\t\t* * 6.清空栈 \t\t\t\t\t\t*\n");
// printf("\t\t* * 7.打印栈 \t\t\t\t\t\t*\n");
// printf("\t\t**********************************************************\t\t\n");
// printf("\n\n\n输入要进行的操作:");
// scanf("%d",&a);
// system("cls");
// switch(a){
// case 0:{
// exit(0);
// break;
// }
// case 1:{
// printf("输入要入栈的元素的个数:");
// scanf("%d",&x);
// printf("\n\n\n输入要入栈的%d个元素:\n",x);
// for(i=1;i<=x;i++)
// {
// scanf("%d",&b);
// Push(&L1,b);
// }
// break;
// }
// case 2:{
// printf("请输入要出站的个数:");
// scanf("%d",&x);
// for(i=1;i<=x;i++)
// {
// c=Pop(&L1,&b);
// if(c==0)
// {
// printf("\n\n\n出栈错误(栈已为空)!\n\n\n");
// break;
// }
// printf("\n出栈的元素为%d\n\n",b);
// }
// break;
// }
// case 3:{
// c=GetTop(&L1,&b);
// if(c==0)
// {
// printf("\n\n\n取栈顶元素错误!\n\n\n");
// break;
// }
// printf("\n\n\n栈顶元素为%d\n\n\n",b);
// break;
// }
// case 4:{
// c=StackEmpty(&L1);
// if(c==0)
// {
// printf("\n\n\n栈不为空!\n\n\n");
// break;
// }
// else
// printf("\n\n\n栈为空!\n\n\n");
// break;
// }
// case 5:{
// c=StackLenth(&L1);
// printf("\n\n\n栈的深度为%d\n\n\n",c);
// break;
// }
// case 6:{
// ClearStack(&L1);
// printf("\n\n\n栈已清空!\n\n\n");
// break;
// }
// case 7:{
// PrintStack(&L1);
// break;
// }
// default :{
// printf("\n\n\n系统暂无此功能!\n\n\n");
// break;
// }
//
// }
// printf("按任意键回车后继续........");
// f=getch();
// system("cls");
//
// }
// }