您的位置:首页 > 理论基础 > 数据结构算法

数据结构-链栈(C语言)

2016-09-18 23:45 375 查看
ChainStack.h

typedef struct Node{
DATA data;
struct Node *next;
}ChainStack;
//////有头结点的链栈 /////////

ChainStack *CreatChainStack()//构建栈的头结点,返回该结点指针
{
ChainStack *top;
top=malloc(sizeof(struct Node));//头结点
top->next=NULL;//初始化 空栈
return top;
}

int ChainStackIsEmpty(ChainStack *top)// 判断栈是否为空,空返回1
{
return(top->next==NULL);
}

void ChainStackPush(ChainStack *top,DATA data)//入栈
{
ChainStack *node;
if(!(node=malloc(sizeof(struct Node)))){
printf("分配空间失败!\n");
exit(0);
}
node->data=data;
node->next=top->next;
top->next=node;
}

DATA ChainStackPop(ChainStack *top)//出栈
{
if(ChainStackIsEmpty(top))
{
printf("栈为空!\n");
//return NULL; error:incompatible types when returning type 'void *' but 'DATA' was expected. //NULL空指针
exit(0);
}else{
DATA data;
struct Node *node1;
node1=top->next;//指向栈顶结点
data=node1->data;
top->next=node1->next;//头指针指向栈顶下一个结点
free(node1);
return data;
}
}
ChainStackTest.c
#include<stdio.h>
#include<stdlib.h>
typedef struct {
char key[15];
char name[15];
}DATA;
#include"ChainStack.h"

int main()
{
ChainStack *s;
DATA data;
s=CreatChainStack();
printf("input key,name:");
scanf("%s%s",data.key,data.name);
ChainStackPush(s,data);

printf("input key,name:");
scanf("%s%s",data.key,data.name);
ChainStackPush(s,data);

printf("任意键出栈!\n");
getch();
data=ChainStackPop(s);
printf("(%s,%s)\n",data.key,data.name);

data=ChainStackPop(s);
printf("(%s,%s)",data.key,data.name);

free(s);
getch();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 数据结构