2015-10-12 【项目2 - 建立链栈算法库】
2015-10-12 16:54
525 查看
2015-10-12
数据结构之自建算法库——链栈
1.问题及代码
按照“0207将算法变程序”部分建议的方法,建设自己的专业基础设施算法库。
代码:
1.头文件:
listack.h,包含定义链栈数据结构的代码、宏定义、要实现算法的函数的声明;
2.源文件:
listack.cpp,包含实现各种算法的函数的定义
2.运行结果
3.学习心得
链栈的作用比较强大,也比较复杂。
4.心得体会
多上机,自己编写代码才能真正将知识吸收,不然只能是纸上谈兵,所学甚少。
数据结构之自建算法库——链栈
1.问题及代码
按照“0207将算法变程序”部分建议的方法,建设自己的专业基础设施算法库。
代码:
1.头文件:
listack.h,包含定义链栈数据结构的代码、宏定义、要实现算法的函数的声明;
#ifndef LISTACK_H_INCLUDED #define LISTACK_H_INCLUDED typedef char ElemType; typedef struct linknode { ElemType data; //数据域 struct linknode *next; //指针域 } LiStack; //链栈类型定义 void InitStack(LiStack *&s); //初始化栈 void DestroyStack(LiStack *&s); //销毁栈 int StackLength(LiStack *s); //返回栈长度 bool StackEmpty(LiStack *s); //判断栈是否为空 void Push(LiStack *&s,ElemType e); //入栈 bool Pop(LiStack *&s,ElemType &e); //出栈 bool GetTop(LiStack *s,ElemType &e); //取栈顶元素 void DispStack(LiStack *s); //输出栈中元素 #endif // LISTACK_H_INCLUDED
2.源文件:
listack.cpp,包含实现各种算法的函数的定义
#include <stdio.h> #include <malloc.h> #include "listack.h" void InitStack(LiStack *&s) //初始化栈 { s=(LiStack *)malloc(sizeof(LiStack)); s->next=NULL; } void DestroyStack(LiStack *&s) //销毁栈 { LiStack *p=s->next; while (p!=NULL) { free(s); s=p; p=p->next; } free(s); //s指向尾结点,释放其空间 } int StackLength(LiStack *s) //返回栈长度 { int i=0; LiStack *p; p=s->next; while (p!=NULL) { i++; p=p->next; } return(i); } bool StackEmpty(LiStack *s) //判断栈是否为空 { return(s->next==NULL); } void Push(LiStack *&s,ElemType e) //入栈 { LiStack *p; p=(LiStack *)malloc(sizeof(LiStack)); p->data=e; //新建元素e对应的节点*p p->next=s->next; //插入*p节点作为开始节点 s->next=p; } bool Pop(LiStack *&s,ElemType &e) //出栈 { LiStack *p; if (s->next==NULL) //栈空的情况 return false; p=s->next; //p指向开始节点 e=p->data; s->next=p->next; //删除*p节点 free(p); //释放*p节点 return true; } bool GetTop(LiStack *s,ElemType &e) //取栈顶元素 { if (s->next==NULL) //栈空的情况 return false; e=s->next->data; return true; } void DispStack(LiStack *s) //输出栈中元素 { LiStack *p=s->next; while (p!=NULL) { printf("%c ",p->data); p=p->next; } printf("\n"); }
2.运行结果
3.学习心得
链栈的作用比较强大,也比较复杂。
4.心得体会
多上机,自己编写代码才能真正将知识吸收,不然只能是纸上谈兵,所学甚少。
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- C++基于栈实现铁轨问题
- 数据结构之Treap详解
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- JavaScript数据结构和算法之图和图算法
- Array栈方法和队列方法的特点说明
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- 【数据结构与算法】数组应用4:多项式计算Java版