数据结构-链栈(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;
}
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语言源代码
- [数据结构]c语言实现链栈的入栈,出栈,清空,销毁等操作
- 【C语言数据结构】链栈
- 数据结构 - 链栈的基本操作(C语言)
- 数据结构 C语言 双向链栈 迷宫问题
- C语言实现数据结构中的链栈
- 数据结构C语言实现之链栈
- C语言数据结构-链栈
- 数据结构C语言实现栈
- 考研笔记数据结构线性结构之C语言
- 图书管理程序(数据结构c语言实现增删改查)
- c语言数据结构(3)
- 数据结构c语言实现字符串定位(模式匹配)
- C语言实现数据结构中的链队列
- c语言(逆序)建立链栈与栈的基本操作
- c语言实现数据结构中的链表源代码
- C语言数据结构-顺序栈
- C语言实现基本数据结构之栈
- C语言数据结构之:顺序表的实现
- C语言数据结构之单向链表(已经调试可以实现相应的功能了,可是还是有几个问题现在还是不大理解,希望大家能够一起探讨)