
数据结构
Jeff_Winger
这个作者很懒,什么都没留下…
展开
-
合并两个链表,两个表的元素交叉进行,不开辟空间
//编写方法meld,合并之后的两个表变成空表templatevoid chain::meld(chain& a, chain& b){chainNode*pa = a.firstNode;chainNode*pb = b.firstNode;int aS = a.size();int bS = b.size();firstNode = new chainNode(原创 2017-10-19 19:19:45 · 1143 阅读 · 0 评论 -
C++循环链表中进行元素的翻转
//循环链表的翻转函数templatevoid circularchain::reverse(){ chainNode*pr,*r; chainNode*p = firstNode->next; //把链表分成两段 firstNode->next = firstNode; //从p里面拿出节点插入只有一个节点的链表,注意此只有一个节点的链表也是循环链表原创 2017-10-22 20:03:42 · 703 阅读 · 0 评论 -
C++中设定线性表的大小(单链表描述)
//设定线性表的大小templatevoid chain::setSize(int theSize){ if (listSize <= theSize) listSize = theSize; else { chainNode* p=firstNode; chainNode* deleteNode; for (int i = 0; i < theSize-1; i++)原创 2017-10-22 20:09:17 · 590 阅读 · 0 评论 -
C++单链表中删除指定范围内的元素
//删除指定范围内的所有元素templatevoid chain::removeRange(int fromIndex, int toIndex){ chainNode*deleteNode; chainNode*p = firstNode; if (fromIndex == 0) //方法复杂度O(toInde原创 2017-10-22 20:10:27 · 1857 阅读 · 0 评论 -
C++中将数组线性表转换为链表
//将数组线性表转换为链表templatevoid chain::fromList(arrayList&theList){ int i = 0; T temp= theList.get(0); firstNode = new chainNode(temp, firstNode); do { chainNode*p = firstNode; int k = 0; whil原创 2017-10-22 20:12:51 · 3651 阅读 · 0 评论 -
C++中将链表转换为数组描述的线性表
//把链表转换为数组线性表templatevoid chain::toList(arrayList&theList){ chainNode*p = firstNode; int i = 0; while (p != NULL) { theList.insert(i, p->element); p = p->next; i++; }}原创 2017-10-22 20:14:37 · 2018 阅读 · 0 评论 -
单链表中重载操作符“=”
//重载=templatevoid chain::operator=(const chain&thelist){ listSize = thelist.listSize; if (listSize == 0) {//链表为空 firstNode = NULL; return; } //链表theList为非空 chainNode* sourceNode = thelist原创 2017-10-22 20:18:18 · 3492 阅读 · 0 评论 -
凸包的形成(C++双向循环链表描述)
程序的输入为点集S,输出为凸包。如果输入的点集共线,则求出包含所有点的最短直线的端点。原创 2017-10-30 22:17:34 · 469 阅读 · 0 评论 -
在单链表中将两个链表合并,合并之后的链表使用的是输入链表的节点空间,合并之后输入链表变为空表
//编写方法meld,合并之后的两个表变成空表template<typename T>void chain<T>::meld(chain<T>& a, chain<T>& b){chainNode<T>*pa = a.firstNode;chainNode<T>*pb = b.firstNode;i原创 2018-03-30 22:29:52 · 454 阅读 · 0 评论 -
运用非递归方法在数组中找出最大值和最小值
经典程序拿来分享。把数组元素看作二叉树的叶子,两两比较,把较小的和较大的分别记录。当数组长度为n,n为偶数,比较次数为3*(n/2-1),n为奇数,比较次数为3*(n-1)/2。可以证明这种非递归算法的比较次数最少。原理如下图所示,实际上运用非递归的方法实现递归。代码如下:template<typename T>{}...原创 2018-06-19 21:06:15 · 2380 阅读 · 0 评论 -
排序算法总结(C++描述)
排序算法可以分为两类,低级排序算法和高级排序算法低级排序算法:选择排序,冒泡排序,插入排序,希尔排序高级排序算法:堆排序,归并排序,快速排序,排序树,基数排序1 选择排序 1) 在对数组元素遍历的过程中,选择最大的元素放入末端的位置,或者选择最小的元素放入开头,不断压缩循环区间,直到只剩一个元素。放的动作通过交换来执行。 代码如下 函数主体由寻找最大元素的索引和交...原创 2018-07-08 23:55:44 · 384 阅读 · 0 评论 -
深度优先(DFS)和广度优先(BFS)的实现方法
可以从图的搜索方式引入这两种搜索方法。假设有下面一个图:深度优先的搜索方式就是从一个顶点v出发,选择邻接于v的尚未达到的顶点u,如果这样的u不存在,则搜索终止。如果u存在,那么从u又开始一个新的DFS,也就是递归。例如在上图的搜索中第一回递归到达的路径是1->2->5->8广度优先的搜索方式就是从一个顶点v出发,先搜索所有邻接于顶点v的顶点集合,这算一回搜索,第二回搜索以邻接于顶...原创 2018-07-04 17:15:47 · 5856 阅读 · 1 评论 -
C++表达式求值(利用二叉树和栈分别描述)
求例如“(123-5)*6+(9-8)*(5-6)-(10-2*(3-9))”这样的表达式的值。此类问题有两种方法可以解答,第一种是利用二叉树的性质,构建表达树栈。第二种方法是利用两个栈,一个放运算符,一个放数据,通过优先级顺序进行运算操作。1)利用二叉树描述 首先建立表达式树栈,把整个表达式按照优先级分解成各个子表达式,把子表达式分配给二叉树的节点构成表达树栈。表达树栈建好之...原创 2018-07-31 00:02:51 · 2630 阅读 · 0 评论 -
败方树(输者树)的建立
给定一个整数数组,要求对数组中的元素构建败方树(数组相邻元素两两比较,从第一个元素开始)。之后修改数组中的元素,要求输出初始构建以及修改后得到的败方树的所有内部结点代表的整数(从左到右从上到下输出) 输入第一行为数组的元素个数n和修改的次数m。第二行为n个整数,即数组的元素。接下来m行代表m次修改操作,每次操作修改数组中的一个元素,每一行包括两个整数,第一个为被修改元素在数组中的标...原创 2018-08-06 19:21:59 · 4179 阅读 · 0 评论 -
C++单链表中求指定元素最后出现的索引
//返回指定元素最后出现的索引templateint chain::lastIndexOf(const T& theElement) const{ chainNode* currentNode = firstNode; chainNode* tempNode; int index=0,i; do { i = index; do { currentNode = c原创 2017-10-22 20:00:26 · 935 阅读 · 0 评论 -
C++双向链表的建立(无头节点)
#ifndef doublychain_#define doublychain_#include#include#include"chainNode.h"using namespace std;templateclass doublychain{public: doublychain(); ~doublychain(); void insert(cons原创 2017-10-22 19:57:28 · 732 阅读 · 0 评论 -
单链表中进行直接插入排序(有头节点)
//插入排序templatevoid chainWithHeader::insertsort(){//将链表分成两段,一段有1个元素,另一段有n-1个元素,这是基础chainNode*p= headerNode->next->next; //p代表第二个节点,此表从第二个节点开始headerNode->next->next = NULL;原创 2017-10-19 19:27:02 · 1851 阅读 · 2 评论 -
单链表中的冒泡排序(有头节点)
//冒泡排序(有头结点)templatevoid chainWithHeader::bubblingSort(){ chainNode*pr, *pt,*pb,*pf,*pd;//pd表示每次要比较的尾元素,pr表示比较元素的前一个,pt表示比较元素的后一个 pb = headerNode; //pb为第一个比较元素的前驱 pr = hea原创 2017-10-21 14:22:29 · 902 阅读 · 0 评论 -
单链表中的冒泡排序(无头节点)
//冒泡排序(无头节点)templatevoid chain::bubblingSort(){chainNode*pb, *pr, *pt, *pd, *pf;pb = firstNode;pr = firstNode->next;pd = NULL;pf = firstNode;T temp;bool swapped = true;原创 2017-10-21 14:24:16 · 1468 阅读 · 0 评论 -
单链表中的选择排序(有头节点)
//选择排序(有头节点)templatevoid chainWithHeader::selectionSort(){chainNode*pd,*pf,*pe,*pa,*pmax;pf = headerNode;pd = NULL;bool sorted = false; //已经排好序之后退出循环while (pf->原创 2017-10-21 14:25:43 · 2468 阅读 · 0 评论 -
单链表中的计数排序(排列排序)(有头节点)
//计数排序templatevoid chainWithHeader::rankSort(){//求排名chainNode*p, *pr;p = headerNode->next->next; //指向第二个元素int*r= new int[listSize](); //记录排名,默认初始化为0int i = 1,j=0;while (p !=原创 2017-10-21 14:28:25 · 857 阅读 · 0 评论 -
C++实现向量构造的线性表
#include#include//copy,copy_backward函数#include //ostringstream#include //字符串#include//异常处理#include //ostream_iterator输出流#include//vector线性表using namespace::std;//异常类class illegalParameterVal原创 2017-10-21 21:29:53 · 514 阅读 · 0 评论 -
C++实现数组构造的线性表
#include#include//copy,copy_backward函数#include //ostringstream#include //字符串#include//异常处理#include //ostream_iterator输出流using namespace::std;//改变二维数组的长度,每一维都可以变化/*templatevoid changeLength2D原创 2017-10-21 21:19:52 · 1077 阅读 · 0 评论 -
单链表中基于箱子的基数排序
//基数排序templatevoid chain::radixSort(int r,int d) //r为基数,d为按基数分解的个数{ int m,theBin; for (int i = 1; i <= d; ++i) //总共排序d次 { //创建并初始化箱子,箱子的大小就是就是基数r的大小 chainNode**bottom,原创 2017-10-30 22:07:31 · 418 阅读 · 0 评论 -
基于箱子排序对一堆n组卡片进行排序(C++单链表描述)
#include#include //STL中的算法#include//标准库中的数学操作函数#include "chain.h"//对卡片进行排序//templatevoid cardSort(int n, chain& L){ //先对面值进行排序(有5种面值) for (int k = 1; k <= 3; ++k) { int theBin; switch (原创 2017-10-30 22:12:16 · 421 阅读 · 0 评论 -
C++构建循环链表(无头节点)
#ifndef circularchain_#define circularchain_#include#include //数组#include //STL中的算法#include //istringstream流#include//异常处理#include//迭代器#include//标准库中的数学操作函数#include#include#include "cha原创 2017-10-22 19:51:20 · 1933 阅读 · 0 评论 -
C++单链表的建立(有头节点)
#ifndef chainWithHeader_#define chainWithHeader_#include#include //数组#include //STL中的算法#include //istringstream流#include//异常处理#include//迭代器#include//标准库中的数学操作函数#include#include#include原创 2017-10-22 19:55:18 · 6231 阅读 · 0 评论 -
字符串相关面试题(C++描述)
1 不使用C/C++库函数,编程实现函数strcmp的功能int myStrcmp(const char* str1, const char* str2){ while(*str1 != '\0'&&*str2 != '\0'&&*str1 == *str2){ ++str1; ++str2; } if (*str1== '\0'&&...原创 2018-10-22 10:48:36 · 499 阅读 · 0 评论