数据结构
文章平均质量分 63
xiaoming1430026911
现在我是位菜鸟,但我会通过不断地努力,改变自己的水平。
展开
-
C++图的邻接矩阵表示法
代码如下:const int DefaultVertices = 100;const int maxWeight = 1000;template class Graphmtx{ friend istream& operator >> (istream& in, Graphmtx& G);//输入 friend ostream& operator & G);//输出p原创 2017-07-21 23:31:12 · 1220 阅读 · 0 评论 -
迷宫算法的细化(C++)
在数据结构中,迷宫问题属于中等难度的问题。在这里我讲一下我对于求解迷宫问题的理解(看课本中来,然后再自己好好理解)首先从起始点出发,对该位置的四个方向(上右下左)进行探索,若某一个位置可以通过并且该位置是第一次走则进入该位置并把该位置进栈,标记该位置已经走过了,重复这个过程。若走进一个死胡同,则一步一步退出来(出栈处理),若退出来的过程栈空了,说明无法从起点位置找到出口。若前进过程中的某一点是原创 2017-08-20 16:50:36 · 620 阅读 · 0 评论 -
C++顺序表的构建(用数组存储数据)
这是最简单的顺序表,顺序表中的元素都存储在数组T *data中const int defaultSize = 100;template class LinearList{protected: T *data; int maxSize; int last; void reSize(int newSize);//改变数组的大小public: Lin原创 2017-08-20 20:46:26 · 3700 阅读 · 0 评论 -
某人写了n封信和n个信封,如果所有的信都装错了信封。求所有的信都装错信封共有多少种不同情况?
我这里用两种方法:1.第一种是高中的全错位排列公式:S=n!(1-1/1!+1/2!-1/3!+...(-1)^n/n!)C++代码如下:#include using namespace std;int main(){ int n; cout<<"请输入n:"; cin>>n; int t=1, s=1, sum=0; for(int原创 2017-07-28 22:26:40 · 13251 阅读 · 0 评论 -
世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?示例1输入1999 2299输出7这里我用两种方式(java):第一种:把两个整数直接转化为二进制,再对两个二进制进行比较,看有多少位不一样。不过要注意的是,因为转化后的二进制是字符串形式,所以在对原创 2017-08-21 19:09:26 · 822 阅读 · 0 评论 -
单链表的构造(C++)
单链表的构造,包括最常用函数,setData(),Insert(),Remove(),getData(),Search()。代码如下:#include #include using namespace std;templatestruct LinkNode{ T data; LinkNode *link; LinkNode(LinkNode原创 2017-08-23 15:02:49 · 2874 阅读 · 0 评论 -
java单链表
java单链表中,要有增删改查、定位、排序、输出、输入、获取长度等方法。import java.util.Scanner;public class List { public class Node{ public int data; public Node next; public Node(int data){ this.data = data; } }原创 2017-09-25 13:02:39 · 393 阅读 · 0 评论 -
单链表的反转
单链表的反转public class Solution { public ListNode ReverseList(ListNode head) { if(head == null)return null; ListNode pre = null; ListNode next = null;原创 2017-09-25 13:11:11 · 358 阅读 · 0 评论 -
十进制转化为二进制(java)
这里我用了两种方法,十进制数为ten1.高中时老师教的方法,把ten不断整除得商,直到商小于2为止。把整除得到的余数倒过来拼成一个数即为十进制转化为二进制的结果。不过最好用数组把数字存起来。代码如下:static ArrayList a=new ArrayList();读取十进制数nScanner reader=new Scanner(System.in);int ten=r原创 2017-07-28 09:03:52 · 690 阅读 · 0 评论 -
循环队列的简单构造(C++)
这是简单的循环队列,采用数组来存储队列中的元素templateclass Queue{public: Queue(int sz=10); ~Queue(){delete[]elements;} bool EnQueue(const T&x); bool DeQueue(T&x); bool getFront(T&x);原创 2017-08-18 08:35:03 · 513 阅读 · 0 评论 -
链式队列的构造(C++)
链式队列和数组队列有些不同,链式队列的队尾指针是指向最后一元素位置,而数组队列是指向最后一个元素的下一个位置。链式队列可以充分应用存储空间,不会存在浪费的情况。templatestruct LinkNode{ T data; LinkNode *link; LinkNode(T&x, LinkNode*p=NULL):data(x),link(p){}}原创 2017-08-18 12:36:17 · 439 阅读 · 0 评论 -
顺序栈,数组存储栈元素(C++)
用数组来存储栈中的元素const int stackIncreament=20;templateclass Stack{public: Stack(int sz=50); ~Stack(){delete []elements;} void Push(const T&x); bool Pop(T&x); bool getTop(原创 2017-08-18 15:07:00 · 1377 阅读 · 0 评论 -
链式栈的构造(C++)
栈顶指针指向最后一个元素,进行栈的插入时,可以使用语句top=LinkNode(x, top);templatestruct LinkNode{ T data; LinkNode *link; LinkNode(T &x, LinkNode*p=NULL):data(x),link(p){}};template//链式栈和顺序栈还是有些不一样的,比如原创 2017-08-18 15:44:06 · 446 阅读 · 0 评论 -
C++图的邻接表表示方法
C++图的邻接表表示方法const int DefaultVertices = 100;template struct Edge{//边节点的定义int dest;//边的另一顶点位置E cost;//边上的权值Edge *link;//下一条边链指针Edge(){}//构造函数Edge(int num, E weight):dest(num),cost(weight),link原创 2017-07-27 14:22:04 · 1990 阅读 · 2 评论 -
C++中二维数组的初始化
在C++中,二位数组有两种使用方式。第一种是静态声明及初始化,如下:int array2[3][2]={{4,2},{5},{6}};第二种是,有时我们不知道二维数组需要多少行和多少列,这时是动态数组。int **array;后来我们通过输入来获取数组的行n和列m,则对数组进行这样处理:array=new int*[n]; for(int i=0;i<n;i++)原创 2017-08-18 17:54:16 · 17701 阅读 · 0 评论 -
递归实现全排列
大概思路:对后i个数进行排列,如前n-i个数位置已经固定,对后i个数进行递归排序。排序规则是:将第n-i个数的位置和第n-i+1~n-1的数位置分别进行调换并输出,在输出完成后要调换回来。C++代码:#include using namespace std;int n;void Paixu(int a[],int m){ if(m>=n){原创 2017-07-27 19:28:36 · 305 阅读 · 0 评论 -
邻接表顶点的删除(C++)
这里的边是无向边删除顶点v时,要找到顶点v的邻接顶点w,把w中指向v的边删除掉,再删除边(v,w)。循环这个过程,直到把和顶点v有关的边都删除掉为止。再接着需要删除顶点v。不可以直接像数组那样直接把顶点v之后的顶点位置像前移动一位,因为这样其他顶点的位置将会发生变化,顶点边中的顶点位置将会出错。边和顶点的定义如下:struct Edge{//边节点的定义 int dest;//原创 2017-07-27 20:44:50 · 5346 阅读 · 0 评论