数据结构
文章平均质量分 81
黑の旋风
有兴趣的老铁们欢迎关注公众号:gh_7bad42dfce12,微博文章同步更新至微信公众号~
展开
-
顺序表的基本操作
进入数据结构首先接触到的就是线性结构,而顺序表是典型的线性结构。在此我们一起来实现关于顺序表的一些基本操作。int begin(); //开始位置int end(SeqList *list); //结束位置void InitSeqList(SeqList *list);//初始化bool isempty(SeqList *list);//判断是否为空b原创 2015-04-22 11:14:34 · 697 阅读 · 0 评论 -
【C++】通用单链表
在C++的学习中,采用模板类,而采用虚函数实现多态性,达到通用的目的。结点类数据域被改造为指针,而把数据放在一个抽象类中,由指针与之建立联系。 采用虚函数实现多态性,达到通用的目的。堆内存的分配与释放,关键不是创建,而是释放! 要特别仔细揣摩堆内存的分配与释放,删除一个结点时系统自动调用结点类析构函数释放结点占用的动态内存,而结点释放时系统自动调用数据域类析构函原创 2015-07-05 16:49:47 · 1234 阅读 · 0 评论 -
双向循环链表
双向链表所尊崇的结点如图所实现的功能如下:void InitList(List *list);void push_back(List *list, ElemType x);void push_front(List *list, ElemType x);void show_list(List *list);bool pop_front(List *list);bool原创 2015-05-07 01:11:45 · 759 阅读 · 2 评论 -
四种插入排序说明
宏定义如下:#includeusing namespace std;#define M 21typedef int SqList[M];一.直接插入排序实现代码如下:void InsertSort(SqList &L,int n)//直接插入排序{ for(int i = 2;i < n;++i) //从下标为2处开始处理 { if(L[i] <=原创 2015-06-16 02:57:55 · 1317 阅读 · 2 评论 -
【C++/数据结构】顺序表的基本操作
#include using namespace std;typedef enum{ FALSE, TRUE }Status;templateclass SeqList{public: SeqList(int sz = DefaultSize) { capacity = sz > DefaultSize ? sz : DefaultSize; base = new Ty原创 2015-08-22 15:27:44 · 1510 阅读 · 0 评论 -
【C++/数据结构】循环链表的基本操作
#pragma once#ifndef _SCLIST_H_#define _SCLIST_H_#include #include using namespace std;typedef enum{FALSE,TRUE} Status;template class List;templateclass ListNode{ friend class List;pub原创 2015-08-22 15:43:43 · 851 阅读 · 0 评论 -
【C++/数据结构】单链表的基本操作
#pragma once#ifndef _CLIST_H_#define _CLIST_H_#include #include using namespace std;template class List;typedef enum { FALSE, TRUE }Status;templateclass ListNode{ friend class List;pub原创 2015-08-22 15:41:30 · 862 阅读 · 0 评论 -
【C++/数据结构】双向链表的基本操作
#pragma once#ifndef _DLIST_H#define _DLIST_H#include #include using namespace std;typedef enum{FALSE, TRUE} Status;template class List;templateclass ListNode{ friend class List;public:原创 2015-08-22 15:45:31 · 604 阅读 · 0 评论 -
C++顺序表(殷人昆版)
此代码将顺序表的基本创建函数写出,能够完成基本的操作。原创 2015-12-30 15:51:54 · 669 阅读 · 0 评论 -
C++单链表(殷人昆版)
#include #include #include using namespace std;templatestruct ListNode{ T data; ListNode *next; ListNode(ListNode *ptr = NULL) :next(ptr) {} ListNode(const T& item, ListNode * ptr = NULL原创 2015-12-30 15:55:10 · 825 阅读 · 0 评论 -
C++双向循环链表(殷人昆版)
#include #include #include using namespace std;templatestruct DblNode{ T data; DblNode *lLink, *rLink; DblNode(DblNode *left = NULL, DblNode * right = NULL) :lLink(left) ,rLink(right) {原创 2015-12-30 15:57:14 · 624 阅读 · 0 评论 -
C++循环链表(殷人昆版)
#include #include #include using namespace std;templatestruct CircListNode{ T data; CircListNode *next; CircListNode(CircListNode *n = NULL) :next(n) {} CircListNode(T d, CircListNode *n原创 2015-12-30 15:56:03 · 622 阅读 · 0 评论 -
【单链表实现】学生管理系统(缺少文件输入输出流)
本篇博文结合学过的数据结构单链表的知识,来实现一个学生管理系统的创建,仍有不完善的地方,望大家指出,对于文件输入输出流,会在后续添加。详细代码如下:Garde.h#pragma once#pragma warning(disable:4996)#include #include #include #include #include using namespace原创 2015-11-28 21:23:06 · 1043 阅读 · 0 评论 -
快速排序(殷人昆版)
快速排序的基本思想:任取待排序元素序列中的某个元素(例如取第一个元素)作为基准,按照该元素的排序码大小,将整个元素序列划分为左右两个子序列;左侧子序列中元素的排序码都小于基准元素的排序码,右侧子序列中的元素的排序码都大于基准元素的排序码。然后在左右序列中重复这种操作。void Swap(int& a, int& b){ int tmp = a; a = b; b = tmp原创 2016-01-02 00:30:48 · 808 阅读 · 2 评论 -
约瑟夫环扩展问题
编号为1~N的N个人按顺时针方向围坐一圈,每人持有一个密码,(正整数,可以自由输入),开始入选一个正整数作为报数上限值M,从第一个人按顺时针方向自1开始顺序报数,报到M时停止报数。报M的人出列,将他的密码作为新的M值,从他的顺时针方向上的下一个人开始从1报数,如此下去,直到所有人出列为止。具体代码如下:#include using namespace std;typedef stru原创 2016-04-26 18:13:26 · 1353 阅读 · 0 评论 -
【排序】基数排序(计数排序、桶排序)
在此对于桶排序做出两种方法:一.简化版桶排序代码如下:/*简化版的桶排序*/#include int main(){ int book[1001],i,j,t,n; for(i=0;i<=1000;i++) { book[i]=0; } scanf("%d",&n);//输入一个数n,表示接下来有n个数 for(i=1;i<=n;i++)//循环读入n个数,并进原创 2015-06-26 03:45:20 · 865 阅读 · 2 评论 -
[数据结构]纸牌游戏——小猫钓鱼
星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中原创 2015-06-23 14:37:52 · 6152 阅读 · 0 评论 -
行编辑程序(基于链栈)
行编辑程序只需要在链栈的基础上加上行编辑程序函数:void LineEdit(Stack *st);//行编辑函数如下:void LineEdit(Stack *st)//单个字符处理{ int i,j = 0; char ch; ElemType a[100]; InitStack(st); cout<<"请输入字符串:"<<endl; ch = getch原创 2015-05-09 13:54:01 · 816 阅读 · 0 评论 -
括号匹配(基于链栈)
括号匹配只需要在链栈的基础上增加括号匹配函数:void matching(Stack *st);//括号匹配int Match(ElemType e,ElemType ch);函数如下:int Match(ElemType e,ElemType ch){ if(e == '(' && ch == ')') { return 1; } else if(e =原创 2015-05-09 13:48:01 · 1462 阅读 · 0 评论 -
数制转换(基于链栈)
只需在链栈的基础上加上数制转换函数:void Coversion(Stack *st)。具体代码如下:void Coversion(Stack *st)//数制转换{ int N,n; InitStack(st); cout<<"请输入要转换的十进制数:"<<endl; cin>>N; cout<<"请输入所需转换进制数:"<<endl; cin>>n; while(N原创 2015-05-09 13:34:39 · 1027 阅读 · 0 评论 -
顺序队
顺序队所尊崇的结点如图所实现的功能如下:bool IsFull(Queue *Q);//判满bool IsEmpty(Queue *Q);//判空void InitQueue(Queue *Q);//初始化bool EnQueue(Queue *Q, ElemType x);//入队bool DeQueue(Queue *Q, ElemType *v);//出队并返回值原创 2015-05-11 23:43:17 · 693 阅读 · 0 评论 -
链式队
链式栈是特殊的单链表,它只是只能满足链表的一些功能,只能尾插和头删。链式栈所尊崇的结点如图所实现的功能如下:bool QueueEmpty(Queue *Q);//判断队是否为空void InitQueue(Queue *Q);//初始化bool push(Queue *Q,ElemType x);//尾插bool pop(Queue *Q);//头删void Sh原创 2015-05-11 23:54:28 · 455 阅读 · 0 评论 -
链式栈
链式栈是特殊的单链表,它只是只能满足链表的一些功能,只能尾插和头删。链式栈所尊崇的结点如图所实现的功能如下:int StackEmpty(Stack *st);void InitList(Stack *st);//初始化bool push(Stack *st,ElemType x);//尾插bool pop(Stack *st);//头删void ShowStack原创 2015-05-07 01:23:14 · 573 阅读 · 0 评论 -
循环单链表的基本操作
循环单链表所尊崇的结点如图所实现的功能如下:void InitList(List *list);//初始化bool push_back(List *list, ElemType x);//尾插bool push_front(List *list, ElemType x);//头插bool pop_back(List *list);//尾删bool pop_front原创 2015-04-30 00:18:58 · 770 阅读 · 0 评论 -
单链表的基本操作
单链表所尊崇的结点如图所实现的功能如下:void InitList(List *list);//初始化bool push_back(List *list, ElemType x);//尾插bool push_front(List *list, ElemType x);//头插bool pop_back(List *list);//尾删bool pop_front(List原创 2015-04-30 00:04:40 · 524 阅读 · 0 评论 -
双向链表
循环单链表所尊崇的结点如图所实现的功能如下:void InitList(List *list);//初始化bool push_back(List *list, ElemType x);//尾插bool push_front(List *list, ElemType x);//头插bool pop_back(List *list);//尾删bool pop_front原创 2015-05-02 00:25:00 · 568 阅读 · 0 评论 -
顺序栈
顺序栈所尊崇的结点如图所实现的功能如下:bool IsFull(Stack *st);bool IsEmpty(Stack *st);void InitStack(Stack *st);bool Push(Stack *st, ElemType x);bool Pop(Stack *st);bool Pop2(Stack *st,ElemType *v);ElemT原创 2015-05-07 01:20:33 · 507 阅读 · 0 评论 -
排序:快速排序与选择排序
在最近的学习中,对于排序算法进行了一定的学习,在这里对快速排序和选择排序的部分内容进行说明,其余内容在后期会进行补充,感谢大家提出宝贵意见。宏定义如下:#include using namespace std;#define M 21typedef int SqList[M];一.冒泡排序void BubbleSort(SqList &L,int n)原创 2015-06-17 02:06:22 · 1647 阅读 · 2 评论 -
迷宫求解(栈)
这篇博客是借鉴了Always__的博客修改得到了,感谢他的帮助。采用了以栈为基础,在栈的基础上进行迷宫的求解,用Stack和Maze两个文件来实现功能。Stack.h的实现如下:#pragma once#include #include #include #include typedef int DirectiveType; //下一个通道转载 2015-05-18 00:59:00 · 1655 阅读 · 0 评论 -
串的定长顺序存储表示
串的定长顺序存储表示是一种类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。在实现时主要实现以下功能:int Length(SString s); //串长bool StringConcat(SString T, SString s1, SString s2);//用T返回s1和s2连接的串v原创 2015-05-18 03:09:10 · 1611 阅读 · 0 评论 -
排序:归并排序
归并排序是又一类不同的排序方法。归并的含义是将两个或两个以上的有序表组合成一个新的有序表。2-路归并排序中的核心操作是将一位数组中的前后相邻的两个有序序列合并为一个有序序列。具体代码和测试如下:#include using namespace std;#include#define M 21typedef int SqList[M];/*归并排序是又一类不同的排序方原创 2015-06-23 01:16:12 · 1058 阅读 · 0 评论 -
逆波兰计算器与中缀表达式向后缀表达式的转化实例
在本篇博文中,博主通过运用栈这一数据结构首先实现中缀表达式到后缀表达式的转换,而后通过结果运用逆波兰计算器得出计算结果。具体代码如下:#include #include #include using namespace std;typedef char ElemType;typedef enum{TRUE,FALSE} Status;#define STACK_INIT_S原创 2016-04-30 23:55:00 · 810 阅读 · 0 评论