您的位置:首页 > 编程语言 > C语言/C++

链栈

2018-04-11 23:50 218 查看
//linkstack.h

#include<string.h>
#include<malloc.h>
#include<limits.h>
#include<stdio.h>
#include<io.h>
#include<math.h>
#include<process.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR -1
#define INFEASIBLE -1

typedef int DataType;

typedef struct node
{
DataType data;
struct node *next;
}LinkStack;

LinkStack *LStackInit()
{
LinkStack *h;
h=(LinkStack*)malloc(sizeof(LinkStack));
h->data=1;
h->next=NULL;
return h;
}

int LStackIsEmpty(LinkStack *ls)
{
return (ls->next?FALSE:TRUE);
}

LinkStack *LStackPush(LinkStack *ls,DataType x)
{
LinkStack *p;
p=(LinkStack*)malloc(sizeof(LinkStack));
p->data=x;
p->next=ls;
ls=p;
return ls;
}

DataType LStackGetTop(LinkStack *ls)
{
if(!ls)
{
printf("栈是空的");
return NULL;
}
return ls->data;
}

LinkStack *LStackPop(LinkStack *ls,DataType *e)
{
LinkStack *p;
if(!ls)
{
printf("栈是空的");
return NULL;
}
p=ls;
*e=p->data;
ls=ls->next;
free(p);
return ls;
}


//main.cpp

#include"linkstack.h"
int main()
{
int a[5]={1,2,3,4,5},i,isempty;
LinkStack *linkStack;
DataType tmp;
linkStack=LStackInit();
printf("依次向栈内压入1,2,3,4,5:\n");
for(i=0;i<5;i++)
{
linkStack=LStackPush(linkStack,a[i]);
}
printf("栈顶元素为:");
printf("%d\n",LStackGetTop(linkStack));
linkStack=LStackPop(linkStack,&tmp);
printf("出栈后的栈顶元素是:");
printf("%d\n",LStackGetTop(linkStack));
isempty=LStackIsEmpty(linkStack);
if(isempty==0)
{
printf("当前链栈为非空链栈\n");
}
else
{
printf("当前链栈为空链栈\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息