数据结构
超爱笑的
这个作者很懒,什么都没留下…
展开
-
蓝桥杯——历届真题 异或数列-python(思路非原创)
思路参考链接:https://blog.csdn.net/zy98zy998/article/details/122279183def check(li):#因为无论怎么选择,li中的所有元素都要经历一次异或#两人平局时,两人的最终的数一样,即所有的元素异或的结果为0时,两人平局#计算每个位1的个数 result=0 max1=0 for i in li[1:]: result=result^i max1=max(max1,i) if原创 2022-03-20 12:37:07 · 1526 阅读 · 2 评论 -
蓝桥杯BASIC-22FJ的字符串——python
思路:观察发现每一次循环只需要增加一个对应B/C/D/E……后面的和前面的一样,所以可以分两步,先在原有基础上增加一个对应的字母B/C/D/E……,然后把前面的复制一下加到后面 即可。 N=int(input()) l1=['A'] for i in range(1,N): l2=[] l2.extend(l1) l1.append(chr(65+i)) l1.extend(l2) for i in range(原创 2021-11-02 21:22:57 · 210 阅读 · 0 评论 -
蓝桥杯BASIC-23芯片测试——python
思路:因为已知好芯片比坏芯片多,所以每一列如果1多,说明对应的芯片是好芯片,如果0多,说明对应的芯片是坏芯片。n=int(input()) l=[] for i in range(n): l.append(input().split()) a=0 b=0 for i in range(n): #lie for j in range(n): #hang if int(l[j][i])==0:原创 2021-11-02 20:58:04 · 354 阅读 · 0 评论 -
蓝桥杯BASIC-24龟兔赛跑预测——python
#注意:这道题是整数输入整数输出#兔子速度、乌龟速度、领先t米休息s秒、赛道长度v1,v2,t,s,l=map(int,input().split())x1=0 #兔子已经跑的距离x2=0 #乌龟已经跑的距离time=0 #经过的时间while x1<l and x2<l: x1+=v1 x2+=v2 time+=1 if(x1-x2>=t) and x1<l and x2<l: for i in ran原创 2021-11-02 11:46:21 · 292 阅读 · 0 评论 -
蓝桥杯BASIC-25回形取数——python
m,n=map(int,input().split()) l1=[] tmp1=0 #标记方向 tmp2=0 #标记圈数 tmp3=0 #防止重复输出拐角 if m<n: num=m*2 else: num=n*2-1 for i in range(m): l1.append(input().split()) for i in range(0,num): #带初始一共拐多少次原创 2021-11-02 11:02:10 · 106 阅读 · 0 评论 -
蓝桥杯BASIC-26报时助手——python
先判断小时再判断分钟 h,m=map(int,input().split()) dic={0:"zero", 1: "one", 2:"two", 3:"three", 4:"four", 5:"five", 6:"six", 7:"seven", 8:"eight", 9:"nine", 10:"ten", 11:"eleven", 12:"twelve", 13:"thirteen", 14:"fourteen", 15:"fifteen", 16:"sixteen", 17:"seve原创 2021-11-02 09:58:45 · 133 阅读 · 0 评论 -
第十二届蓝桥杯砝码称重问题——python
方法一(O(n²)):从第一个开始计算,用l2辅助存储当前前i个砝码可以称的重量(q、q+i、abs(q-i)),每次加一个砝码带入计算更新l2、l3。(此方法会超时) n=int(input()) l1=list(map(int,input().split())) l2=[] l2.append(l1[0]) l3=[] for i in l1[1:]: for q in l2: if i not in l3:原创 2021-11-01 16:37:27 · 2193 阅读 · 2 评论 -
蓝桥杯练习题——Huffuman树Python
Huffuman树Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: 1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。 2. 重复步骤1,直到{pi}中只剩下一个数。 在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。 本题任务:原创 2021-11-01 12:08:11 · 219 阅读 · 0 评论 -
数据结构——归并排序
王道书上的归并排序算法,有疑问的欢迎评论区交流!//归并排序#include<stdio.h>#include<stdlib.h>void Merge(int A[],int low,int mid,int high){ int i,j,k; int B[high]; for(int k=low;k<=high;k++){ B[k]==A[k]; //A中所有元素复制到辅助数组B中 } for(i=low,j=mid+1,k=i;i<=mid原创 2020-07-22 11:10:45 · 195 阅读 · 0 评论 -
数据结构——选择排序之简单选择排序、堆排序
//选择排序(简单选择排序、堆排序) #include<stdio.h>#include<stdlib.h> void swap(int &a,int &b){ int temp=a; a=b; b=temp;}void SelectSort(int A[],int n){//简单选择排序 for(int i=0;i<n-1;i++){//共i-1趟 int min=i; for(int j=i+1;j<n;j++){原创 2020-07-22 10:46:40 · 155 阅读 · 0 评论 -
数据结构——交换排序之冒泡排序、快速排序
//交换排序#include<stdio.h>#include<stdlib.h>void BubbleSort(int A[],int n){//冒泡排序 int i,temp,flag; for(i=0;i<n-1;i++){ //共n-1趟(一趟确定一位) flag=0; for(int j=n-1;j>i;j--){ if(A[j]<A[j-1]){ temp=A[j]; A[j]=A[j-1]; A[j-1原创 2020-07-22 00:11:57 · 117 阅读 · 0 评论 -
数据结构——插入排序(直接插入、折半插入、希尔排序)
#include<stdio.h>#include<stdlib.h>void InsertSort1(int A[],int n){//直接插入排序 /*注:A是函数参数,到了本函数中,A只是一个指针 (地址,系统在本函数运行时,是不知道a所表示的地址有多大的数据存储空间,这里只是告诉函数:一个数据存储空间首地址) 所以,sizoef(A)的结果是指针变量A占内存的大小,并非 A的长度 */ if(n==1){ printf("排序结果为%d",A[0]);原创 2020-07-19 13:08:05 · 274 阅读 · 0 评论 -
数据结构——二分查找
顺序表的相关操作参见https://blog.csdn.net/qq_40280704/article/details/105916485//二分查找#include <stdio.h>#include <stdlib.h>#define MaxSize 50 typedef struct{ int *elem; int MaxSize,TableLen; }SeqList; int Binary_Search(SeqList L,int key){ int原创 2020-07-16 12:39:14 · 77 阅读 · 0 评论 -
数据结构——线性表的顺序查找
//顺序查找#include <stdio.h>#include <stdlib.h>typedef struct{ //查找表的数据结构 int *elem; //元素存储空间基址,建表时按实际长度分配,0号单元留空 int length; //表长 }SSTable;int i;int search(SSTable ST,int key){ ST.elem[0]=key; //哨兵(表中无key时,return i=0) for(i=ST.lengt原创 2020-07-16 12:21:45 · 543 阅读 · 0 评论 -
数据结构——二叉排序树的创建、插入、查找(循环和递归)
#include <stdio.h>#include <stdlib.h>typedef struct BSTNode{ int data; struct BSTNode *lchild,*rchild;}BSTNode,*BiTree; BSTNode *BST_Search1(BiTree T,int key){ //查找值为key的结点(while循环) while(T!=NULL&&key!=T->data){ if(key<原创 2020-07-10 11:51:38 · 902 阅读 · 1 评论 -
数据结构——线索二叉树的线索化(中序、先序、后序)
//线索二叉树#include<stdio.h>#include<stdlib.h>typedef struct ThreadNode{int data;struct ThreadNode *lchild,*rchild;int ltag,rtag; //tag=0时,指向左子树或又子树,tag为1时,指向中序遍历序列的前驱或后继}ThreadNode,*ThreadTree;ThreadNode *pre=NULL; //定义全局变量pre,指向当前访问结点的原创 2020-07-07 17:56:38 · 679 阅读 · 0 评论 -
数据结构——二叉树的创建、遍历(先序、中序、后序、层次),以及求已知结点p的前驱、后继结点
//二叉树的创建、遍历以及求结点p的前驱、后继结点#include <stdio.h>#include <stdlib.h>typedef struct BiTNode{int data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;BiTree CreateBTree(BiTree T, bool isRoot){//创建一个二叉树 -1代表空节点char ch;if (isRoot)printf(“Root:原创 2020-07-07 14:19:04 · 362 阅读 · 0 评论 -
数据结构——链式队列的初始化、判空、入队、出队
//队列的链式存储//注:链式队列一般是带头结点的,比如我使用的方法。因此第一个元素为Q.front->next 需要注意。#include <stdio.h>#include <stdlib.h>typedef struct Linknode{ //链式队列的结点int data;struct Linknode *next; //结点的next指针}Linknode;typedef struct{ //链式队列Linknode *front,*rear原创 2020-06-17 10:35:38 · 4406 阅读 · 0 评论 -
数据结构——顺序队列(循环队列的初始化、判空、入队、出队)
//队列的顺序存储(循环队列)#include<stdio.h>#include<stdlib.h>#define Maxsize 10typedef struct{int data[Maxsize];int front,rear;}SqQueue;void InitQueue(SqQueue &Q){//初始化队列Q.front=Q.rear=0;}bool isEmpty(SqQueue Q){//判断队列是否为空if(Q.front==Q.rea原创 2020-06-17 09:56:01 · 3611 阅读 · 0 评论 -
数据结构——链栈(不带头结点)的初始化、入栈、出栈
//不带头结点的链式栈的相关操作//注:不带头结点的链栈,其栈顶节点可以用*L表示,L==null时,栈为空,其余情况l就是栈顶节点#include<stdio.h>#include<stdlib.h>typedef struct Linknode{int data;struct Linknode *next;}*LiStack;//初始化栈顶节点void InitStack(Linknode *&L){L=NULL;}bool IsEmpty(Lin原创 2020-06-15 09:55:20 · 4359 阅读 · 3 评论 -
数据结构——顺序栈的初始化、判断空、入栈、出栈、读取栈顶元素
//顺序栈的相关操作#include #include <stdio.h>#include <stdlib.h>#define Maxsize 10typedef struct{ //顺序栈int data[Maxsize];int top;}SqStack;void InitStack(SqStack &S){//初始化栈S.top=-1;}bool StackEmpty(SqStack S){//判断栈空if(S.top==-1){return原创 2020-06-15 08:31:17 · 1899 阅读 · 0 评论 -
数据结构——双链表的初始化及插入、删除
//双链表的相关操作#include<stdio.h>#include<stdlib.h>typedef struct DNode{int data;struct DNode *prior,*next;}DNode,*DLinklist;//初始化双链表bool InitDLinklist(DLinklist &L){L=(DNode *)malloc(sizeof(DNode));if(L==NULL){return false;}L->pr原创 2020-06-14 14:46:52 · 709 阅读 · 0 评论 -
数据结构——单链表的创建、查找、插入、删除操作
//单链表#include <stdio.h>#include <stdlib.h>typedef struct LNode{int data; //数据域struct LNode *next; //指针域}LNode,*LinkList;//有头结点的头插法建立单链表:LinkList List_HeadInsert(LinkList &L){LNode s;int x;L=(LinkList)malloc(sizeof(LNode)); L-&原创 2020-06-14 11:24:41 · 1883 阅读 · 0 评论 -
数据结构——顺序表的动态分配的创建及其添加、删除、查找等操作
//顺序表的动态分配的创建及其添加、删除、查找等操作#include<stdio.h>#include<stdlib.h>#define InitSize 10 //表长度初始定义typedef struct {int *data; //指示动态分配数组的指针(指向第一个元素)int MaxSize,length; //数组的最大容量和当前个数}...原创 2020-05-04 13:25:25 · 705 阅读 · 6 评论 -
数据结构顺序表——静态数组的创建
//创建静态顺序表#include<stdio.h>#define Maxsize 10 //表的最大长度为10typedef struct{int data[Maxsize];int length;}Sqlist;void InitList(Sqlist &L){ for(int i=0;i<Maxsize;i++) { //使所有元素默认为0,防止...原创 2020-05-04 13:20:19 · 347 阅读 · 0 评论