数据结构和算法
Pureso
这个作者很懒,什么都没留下…
展开
-
稀疏数组 棋盘例子
基本介绍当一个数组中大部分元素是0,或者为同一个值的数组中,可以使用稀疏数组来保存该数组。先看一个实际的需求应用举例使用稀疏数组存放类似前面的二维数组(棋盘、地图等)分析思路二维数组转稀疏数组的思路1、遍历原始二维数组,得到有效的数据个数sum2、根据sum即可创建出稀疏数组 sparseArr int[sum+1] [3]3、将二维数组的有效数据存到稀疏数组里稀疏数组转二维数组的思路1、先读取稀疏数组的第一行,根据第一行的数据创建出二维数组 chessArr2=int[spar原创 2021-07-29 01:47:33 · 82 阅读 · 0 评论 -
单链表的逆置
实际就是用一个指针遍历原单链表,先将L->next=NULL,使其成为一个空表,然后将p结点使用头插法遍历插入表中即可。//逆置单链表bool ReverseLinkList(LinkList &L){ LNode* p=L->next; LNode* q; L->next=NULL;//将L看成是一个只有头结点的空链表 while(p!=NULL){ q=p->next;//用q存放p的后继结点 p->原创 2021-04-16 16:52:49 · 133 阅读 · 0 评论 -
删除单链表中第一个值为x的结点
bool DeListFirstElem(LinkList &L,ElemType x){ LNode *pre=L; LNode *p=pre->next; while(p->data!=x&&p->next!=NULL){//找值为x的结点,找不到pre和p都后移一位 pre=p; p=p->next; } if(p!=NULL){//找到p pre->next=原创 2021-04-16 15:49:17 · 5077 阅读 · 0 评论 -
栈的括号匹配
在Stack.cpp里写入方法//栈(stack)#include <stdlib.h>#include <stdio.h>#define ElemType char//顺序栈typedef struct{ ElemType data[MaxSize]; int top;//栈顶指针}SqStack;//初始化栈void InitSqStack(SqStack &s){ s.top=-1;}//判空bool EmptySt原创 2021-04-16 01:56:57 · 139 阅读 · 0 评论 -
数据结构——队列
创建文件Queue.cpp,里面存入一些方法。//队列(Queue),是指只允许在一端进行插入,另一端删除的顺序表//队头:允许删除的一端,队尾:允许插入的一端#include <stdlib.h>#include <stdio.h>#define ElemType int#define MaxSize 5//队列的顺序存储typedef struct{ ElemType data[MaxSize]; int front,rear;}SqQueue原创 2021-04-15 03:11:51 · 447 阅读 · 0 评论 -
数据结构——栈
创建文件Stack.cpp,里面存入栈的基本方法//栈(stack)#include <stdlib.h>#include <stdio.h>#define ElemType int#define MaxSize 5//顺序栈typedef struct{ ElemType data[MaxSize]; int top;//栈顶指针}SqStack;//初始化栈void InitStack(SqStack &s){ s.top=原创 2021-04-15 00:46:09 · 62 阅读 · 0 评论 -
数据结构——双链表
创建文件DLinkList.cpp,里面存入双链表的基本方法。//双链表#include <stdlib.h>#include <stdio.h>#define ElemType inttypedef struct DNode{ ElemType data; struct DNode *prior,*next;}DNode,*DLinkList;//初始化双链表(带头结点)bool InitDLinkList(DLinkList &L){原创 2021-04-15 00:14:12 · 138 阅读 · 0 评论 -
数据结构——单链表
创建文件LinList.cpp,里面存入单链表的方法。//单链表#include <stdlib.h>#define ElemType inttypedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList;/*LNode *L; 声明一个指向单链表第一个结点得指针 这种命名方式更加强调这是一个结点LinkList L; 声明一个指向单链表第一个结点得指针原创 2021-03-24 22:33:51 · 195 阅读 · 0 评论 -
顺序表的一些方法
//顺序表#define ElemType int#define MaxSize 10typedef struct{ ElemType data[MaxSize]; int length;//表当前的长度}SqList;//初始化表void InitSqlList(SqList &L){ L.length=0;}//通过键盘给表赋值,只赋了5个void xhfz(SqList &L){ for(int i=0;i<5;i++){原创 2021-03-19 23:01:39 · 134 阅读 · 0 评论 -
求两个顺序表的并集
求顺序表L1和L2的并集,建立表L3。先将L1复制到L3中,再遍历L2,与L1中所有元素都不相同的赋给L3。//求两个顺序表的并集void UnionSqList(SqList &L1,SqList &L2,SqList &L3){ int k; for(int i=0;i<L1.length;i++){//先把L1中的元素都赋给L3 L3.data[i]=L1.data[i]; } k=L1.length; for原创 2021-03-19 22:05:00 · 2206 阅读 · 0 评论 -
求两个顺序表的交集
求两个顺序表的交集,循环遍历即可void IntersectionSqList(SqList &L1,SqList &L2,SqList &L3){ int k=0; for(int i=0;i<L1.length;i++){//遍历L1 for(int j=0;j<L2.length;j++){//遍历L2 if(L1.data[i]==L2.data[j]){//寻找L2中与目前L1中是否元素值相等的元素原创 2021-03-19 19:31:00 · 3079 阅读 · 0 评论 -
删除顺序表的所有元素值为e的元素
//删除所有值为e元素void DeleteSameSqList(SqList &L,ElemType e){ int k=0; for(int i=0;i<L.length;i++){ if(L.data[i]!=e){ L.data[k]=L.data[i];//重新建立一个没有元素e的顺序表 k++; } } L.length=k;}#include <stdio原创 2021-03-19 14:48:35 · 3900 阅读 · 0 评论 -
顺序表的逆置
将前半部分的元素与后半部分的元素交换即可//将顺序表L逆置void ReverseSqList(SqList &L){ for(int i=0;i<L.length/2;i++){ ElemType e; //交换数据 e=L.data[i]; L.data[i]=L.data[L.length-1-i]; L.data[L.length-1-i]=e; }}#include <st原创 2021-03-19 01:44:50 · 437 阅读 · 0 评论 -
有序顺序表的归并
当一个有序表(这里假设是从小到大排列)采用顺序存储时,称为有序顺序表。假设每个顺序表中的元素都不相同,将两个具有相同次序得有序顺序表归并为一个有序顺序表。//归并方法void Merge(SqList &L1,SqList &L2,SqList &L3){ int i=0,j=0,k=0; for(;i<L1.length&&j<L2.length;k++){ if(L1.data[i]<L2.data[j原创 2021-03-19 01:30:28 · 922 阅读 · 0 评论 -
数据结构——顺序表
先建立一个c++文件起名SqList,里面存放SqList(顺序表的方法)//顺序表#define ElemtType int#define MaxSize 10typedef struct{ ElemtType data[MaxSize]; int length;//表当前的长度}SqList;//初始化表void InitSqlList(SqList &L){ L.length=0;}//通过键盘给表赋值,只赋了5个void xhfz(SqLis原创 2021-03-18 16:43:11 · 110 阅读 · 0 评论