C语言实现数据结构中的链栈
来源:互联网 发布:淘宝微商软件 编辑:程序博客网 时间:2024/04/27 00:36
实现方式一
# include <stdio.h>
# include <stdlib.h>
typedef char NodeData;
//链栈
typedef struct Node
{
NodeData data;
struct Node *next;
}StackNode;
typedef struct
{
StackNode *top;
}
LinkStack;
/*置栈空*/
void initStack(LinkStack *ls)
{
ls->top=NULL;
}
/*判栈空*/
int isStackEmpty(LinkStack *ls)
{
return ls->top==NULL;
}
/*进栈*/
void pushStack(LinkStack *ls,NodeData nodedata)
{
StackNode *p;
p=(StackNode *)malloc(sizeof(StackNode));
p->data=nodedata;
p->next=ls->top;
ls->top=p;
}
/*出栈*/
NodeData popStack(LinkStack *ls)
{
StackNode *p=ls->top;
NodeData popNode=ls->top->data;
ls->top=ls->top->next;
free(p);
return popNode;
}
/*打印栈*/
void printStack(LinkStack *ls)
{
int i=0;
StackNode *node;
node=ls->top;
while(node->next!=NULL)
{
node=node->next;
printf("LinkStack Node %d is %c/n",i,node->data);
i++;
}
}
void main()
{
LinkStack *ls;
char inData;
ls=(LinkStack *)malloc(sizeof(LinkStack));
initStack(ls);
//入栈
printf("Please input data/n");
while(inData!='/n')
{
scanf("%c",&inData);
pushStack(ls,inData);
printf("push %c to stack/n",inData);
}
printf("print linkStack:/n");
//打印栈元素
printStack(ls);
printf("pop stack/n");
//出栈
popStack(ls);
printStack(ls);
printf("pop stack/n");
//出栈
popStack(ls);
printStack(ls);
}
实现方式二
只定义了栈节点
# include <stdio.h>
# include <stdlib.h>
typedef char NodeData; //节点数据
typedef struct Node
{
NodeData data;//节点数据
struct Node * next; //指向下一个节点的指针
}StackNode;
/*置栈空*/
StackNode * initStack(StackNode *top)
{
top=NULL;
return top;
}
/*入栈 (这里很容易出错,需要返回头接点的指针否则每次入参都是指向同一个接点的地址而不是头指针的地址)*/
StackNode * pushStack(StackNode *top,NodeData nodedata)
{
StackNode *p;
p=(StackNode *)malloc(sizeof(StackNode));
p->data=nodedata;
p->next=top;
top=p;
return top;
}
/*打印栈*/
void printStack(StackNode *top)
{
int i=0;
StackNode *node;
node=top;
while(node->next!=NULL)
{
node=node->next;
printf("LinkStack Node %d is %c/n",i,node->data);
i++;
}
}
void main()
{
StackNode *top;
NodeData inData;
top=(StackNode *)malloc(sizeof(StackNode));
top=initStack(top);
printf("Please input data/n");
while(inData!='/n')
{
scanf("%c",&inData);
top=pushStack(top,inData);
printf("push the %c to stack/n",inData);
}
printStack(top);
}
实现方式一 中LinkStack结构类型的定义是为了方便在函数体中修改top指针本身
通过修改指向LinkStack的top指针来控制入栈和出栈.
实现方式二 通过每次修改头指针并返回给入参来控制入栈和出栈.
方式一是通过指针参数修改指针所指内容的典型用法.
方式二是通过函数返回值改变入参内容的典型用法。
- C语言实现数据结构中的链栈
- C语言实现数据结构中的顺序栈
- C语言实现数据结构中的链队列
- 数据结构C语言实现之链栈
- <数据结构>链栈的C语言实现
- C语言数据结构-栈-链表实现
- 两种实现数据结构中的栈(C语言)
- c语言实现数据结构中的栈(数组模拟)
- C语言实现数据结构中的循环链表
- c语言实现数据结构中的链表源代码
- C语言实现数据结构中的顺序表
- 数据结构C语言实现栈
- 数据结构.栈(C语言实现)
- 数据结构---栈C语言实现
- 数据结构栈C语言实现
- 数据结构(C语言实现)
- 数据结构C语言实现
- 数据结构(C语言实现)
- 招聘J2ME游戏开发教师1名
- 瀑布模型项目的安排和过程产品
- 通往目标的路
- Winsock 完成端口类分析(三)
- 终于戴眼镜了
- C语言实现数据结构中的链栈
- 2007年04月22日 加拿大,列治文 晴朗
- Mysql关于数据库和表的几个最基本命令
- 八个黄金句型
- 从今天起(歌词)
- 2007年北京的第一场雪
- 教你提高酒量
- 穿出合适的西装
- gcc 的编辑方法