链栈的实现
2015-04-15 15:02
232 查看
stack.h
stack.c
main.c
运行结果:
#ifndef _STACK_H #define _STACK_H #include<stdio.h> #include<stdlib.h> typedef struct StackNode { int data; struct StackNode* next; }StackNode,*LinkStack; //初始化 void init(LinkStack top); //判断栈是否为空 int isEmpty(LinkStack top); //将一个元素压入栈 int push(LinkStack top, int val); //从栈中弹出一个元素 int pop(LinkStack top, int *val); //获取栈顶元素的值 int getTop(LinkStack top); #endif
stack.c
#include "stack.h" void init(LinkStack top) { top->next = NULL; } int isEmpty(LinkStack top) { if(top->next == NULL) return 1; return 0; } //top指向的结点为空的头结点 int push(LinkStack top, int val) { StackNode *newNode; newNode = (StackNode*)calloc(1,sizeof(StackNode)); newNode->data = val; if(newNode == NULL) return 0; newNode->next = top->next; top->next = newNode; return 1; } int pop(LinkStack top, int *val) { StackNode *oldNode; if(isEmpty(top)) { printf("The stack is empty!\n"); return 0; } oldNode = top->next; //记录栈顶元素的值 *val = oldNode->data; top->next = oldNode->next; //释放 free(oldNode); return 1; } int getTop(LinkStack top) { return top->next->data; }
main.c
#include "stack.h" int main() { LinkStack top; top = (StackNode*)malloc(sizeof(StackNode)); int val, index; init(top); //向栈中压入一系列元素 for(index = 0; index < 12; index++) push(top,index); //获取栈顶元素 val = getTop(top); printf("栈顶元素为:%d\n",val); //弹出栈中元素 printf("依次弹出栈顶元素:\n"); while(!(isEmpty(top))) { pop(top,&val); printf("->%2d",val); } printf("\n"); return 0; }
运行结果:
相关文章推荐
- 数据结构(5) 链栈 c++ 模板实现
- 数据结构第三章实验2.实现链栈的各种基本运算
- C++利用链栈实现中缀表达式转换后缀表达式
- 实验4:栈和队列的基本操作实现及其应用之《链栈》
- 从零开始学C++之数据封装与抽象:分别用C和C++来实现一个链栈
- 栈的实现-顺序栈和链栈
- C++实现链栈和链式队列
- 链栈基本运算的实现
- 前缀表达式转后缀表达式的链栈实现
- 栈的Java实现--链栈
- 看数据结构写代码(9)链栈的实现
- 链栈的实现(加析构、重载、拷贝安全机制)
- 链栈及运算实现
- 链栈的实现
- 数据结构之 链栈的实现
- 链栈的java实现
- 数据结构专题——栈与队列之链栈及其Java实现
- 【数据结构】堆栈(顺序栈、链栈)的JAVA代码实现
- 数据结构通过链栈实现字符串中心对称匹配
- 链栈的表示与实现