快速排序

void quick_sort(int q[], int l, int r)
{if (l >= r) return;//左大于右边 returnint  i = l - 1, j = r + 1, x = q[l + r >> 1];//     定边界while (i < j){do i++;while (q[i] < x); //小于x的数放在x左边do j--;while (q[j] > x);// 大于x的数放在x右边}quick_sort(q, l, j), quick_sort(q, j + 1, r); //递归操作 分别对左右两边的数组排序
}

折半排序

int search(int key[], int n, int  k)
{int low = 0, high = n - 1, mid;while (low <= high){mid = (low + high) / 2;if (key[mid] == k)return mid;  //查找成功,返回mid if (k > key[mid])low = mid + 1;    //在后半序列中查找 elsehigh = mid - 1; //在前半序列中查找 }return -1;//查找失败,返回-1
}

归并排序

void merge(int q[], int l, int r)
{if (l >= r) return;int mid = l + r >> 1;merge(q, l, mid), merge(q, mid, r);//递归操作 分别对左右两边的数组排序int  k = 0, i = l, j = mid + 1, tmp[10010];while (i <= mid && j <= r)//边界{//分别比较两个数组个个元素大小 小的依次放在tmp数组里if (q[i] <= q[j]) tmp[k++] = q[i++]; else tmp[k++] = q[j++];}while (i <= mid) tmp[k++] = q[i++];while (j <= r) tmp[k++] = q[j++];for (i = l, j = 0; i <= r; i++, j++) q[i] = tmp[j];
}

单链表 ,双链表//考的概率不大(应该)

const int  N = 100010;
int head, e[N], ne[N], idx; // head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点
// 初始化
void init()
{head = -1;idx = 0;
}
// 在链表头插入一个数a
void insert(int a)
{e[idx] = a, ne[idx] = head, head = idx++;
}
// 将头结点删除,需要保证头结点存在
void remove()
{head = ne[head];
}// 双链表
int e[N], l[N], r[N], idx;// e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点
// 初始化
void double_init()
{r[0] = 1, l[1] = 0;idx = 2;
}
// 在节点a的右边插入一个数x
void double_insert(int a, int x)
{e[idx] = x;l[idx] = a, r[idx] = r[a];//当前结点的左指针值为a,右指针值为xl[r[a]] = idx, r[a] = idx++;
}
// 删除节点a
void remove(int a)
{l[r[a]] = l[a];r[l[a]] = r[a];
}

// tt表示栈顶
int stk[N], tt = 0, x;// 向栈顶插入一个数
stk[++tt] = x;// 从栈顶弹出一个数
tt--;// 栈顶的值
stk[tt];// 判断栈是否为空
if (tt > 0)
{}

队列

// tt表示栈顶
int stk[N], tt = 0, x;// 向栈顶插入一个数
stk[++tt] = x;// 从栈顶弹出一个数
tt--;// 栈顶的值
stk[tt];// 判断栈是否为空
if (tt > 0)
{}///循环队列// hh 表示队头,tt表示队尾的后一个位置
int q[N], hh = 0, tt = 0;// 向队尾插入一个数
q[tt ++ ] = x;
if (tt == N) tt = 0;// 从队头弹出一个数
hh ++ ;
if (hh == N) hh = 0;// 队头的值
q[hh];// 判断队列是否为空
if (hh != tt)
{}

顺序栈

// 顺序栈
#define N 90
typedef struct  Sqstrack {int data[N];int top;
} Sqstrack;// 初始化
void InitStack(Sqstrack& S) {S.top = -1;
}
// 栈空
bool StackEmpty(Sqstrack S) {if (S.top = -1)//栈空条件return true;elsereturn false;
}
// 进栈
bool push(Sqstrack& S, int x)
{if (S.top == N - 1);return false;S.data(++S.top) = x;return ture;
}
//出栈
bool push(Sqstrack& S, int x)
{if (S.top == - 1);return false;x = S.data(S.top--);return ture;
}

链栈 // 真的会考这个吗?

//1.定义数据类型
typedef int ElemType;
//2.定义链栈结构体
typedef struct LinkStackNode
{ElemType data;//存数据struct LinkStackNode* next;//存下个节点的地址
} LinkStack;
//3.初始化链栈
int initLinkStack(LinkStack* L)
{L = (LinkStack*)malloc(sizeof(LinkStack));//申请内存if (!L->data) return 0;//申请失败L->data = 0;//初始化链栈头结点数据域L->next = NULL;//初始化链栈头结点指针域return 1;
}
//4.入栈
int push(LinkStack* L, ElemType e)
{LinkStack* n;//新节点n = (LinkStack*)malloc(sizeof(LinkStack));if (!n->data) return 0;n->data = e;//存入数据n->next = L->next;//链栈栈顶元素链入新节点,新节点变成栈顶L->next = n;//新节点链入链栈头结点末尾return 1;
}
//5.出栈
int pop(LinkStack* L, ElemType* e)
{if (!L->next) return 0;//栈空,返回0LinkStack* d = L->next;//出栈指针指向栈顶*e = d->data;//赋值L->next = d->next;//头结点跳过出栈节点,链入出栈节点的下一节点free(d);//释放内存return 1;
}
//6.取栈顶
int getTop(LinkStack* L, ElemType* e)
{if (!L->next) return 0;*e = L->next->data;return 1;
}

树的双亲表示法

typedef struct PTNode {int data;int parent;//双亲位置域
}PTNode;typedef struct {PTNode nodes[N];int  n;//结点个数
}PTree;

树的孩子表示法

typedef struct CTNode {//孩子结点int child;struct CTNode* next;
}*ChildPtr;typedef struct       //表头结构
{int data;ChildPtr firstchild;
}CTBox;//孩子链表#define MAX_TREE_SIZE 100
typedef struct      //树结构
{CTBox nodes[MAX_TREE_SIZE];//结点数组int n,r;//结点数和根结点的位置
}CTree;

树的孩子兄弟表示法

typedef struct   CSNode  //表头结构
{int data;struct CSNode *firstChild , *nextsibling;// 第一个孩子和有兄弟指针
}CSNode, *CSTree;//孩子链表

考研408数据结构代码相关推荐

  1. 【23考研】计算机408数据结构代码题强化阶段划重点(王道书)

    视频链接:[23考研]10分钟带你整理408数据结构强化阶段代码题复习重点 本篇只适合考408的同学,请自主命题的同学自觉右上角×掉 因为王道书为了照顾自主命题的同学,所以很多算法也给出了代码实现,实 ...

  2. 【专栏必读】王道考研408数据结构万字笔记(有了它不需要你再做笔记了):各章节内容概述导航和思维导图

    其他科目导航 [专栏必读]王道考研408计算机组成原理万字笔记(从学生角度辅助大家理解):各章节导航及思维导图 [专栏必读]王道考研408操作系统万字笔记(从学生角度辅助大家理解):各章节导航及思维导 ...

  3. 一篇学完:王道考研408数据结构(全)

    笔记首发于:lengyueling.cn PDF版本附在 lengyueling.cn 对应文章结尾,欢迎下载访问交流 绪论 数据结构在学什么 如何用程序代码把现实世界的问题信息化 如何用计算机高效地 ...

  4. [考研408]数据结构算法题——快速排序模板

    目的:速写明确,好改易懂 void QuickSort(int a[], int left, int right) {if (left >= right)return;int i = left, ...

  5. 王道考研408 数据结构 2.3 链表练习题

    2.3 pre typedef struct Lnode{ElemType data;struct Lnode *next; }LNode,*LinkList; typedef struct DNod ...

  6. 王道考研408 数据结构 第三章 栈、队列与数组

    第三章 栈.队列与数组 3.1 栈 3.1.03 假设以I和O分别表示入栈和出栈操作.栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序 ...

  7. 2020年计算机考研408数据结构真题(客观题)

    1.将一个10x10对称矩阵M的上三角部分的元素m,j (1≤i≤j≤10)按列优先存入C语言的一维数组N中,元素m7,2在N中的下标是( ). A.15 B.16 C.22 D.23 答案:C 解析 ...

  8. 2021年计算机考研408数据结构真题(客观题)

    1.已知头指针h指向一个带头结点的非空单循环链表,结点结构为 其中next是指向直接后继结点的指针,p是尾指针,q是临时指针.现要删除该链表的第一个元素,正确的语句序列是( ). A.h-> n ...

  9. 2019年计算机考研408数据结构真题(客观题)

    1.设 n 是描述问题规模的非负整数,下列程序段的时间复杂度是() . x=0; while(n>=(x+1)*(x+1)) x=x+1; A.O(logn) B.O(n^1/2) C.O(n) ...

  10. 【专栏必读】王道考研408计算机组成原理万字笔记、题目题型总结、注意事项、目录导航和思维导图

    王道考研复习指导下载(密码7281) 其他科目导航 [专栏必读]王道考研408操作系统万字笔记(有了它不需要你再做笔记了):各章节内容概述导航和思维导图 [专栏必读]王道考研408数据结构万字笔记(有 ...

最新文章

  1. Java 异常基础 Exception
  2. C#编程中的crc16校验
  3. 在winform嵌入外部应用程序
  4. ActiveMQ集群
  5. java枚举新特性_java回顾之枚举和新特性
  6. VGGnet论文解读及代码实现
  7. 3-6Tensor的属性稀疏的变量的编程
  8. web前端基础(08html5新标签)
  9. 布丁机器人APP响应超时_常见问题解答
  10. 关于transformer是如何处理图像的
  11. numpy.random 模块中文文档学习笔记
  12. ae saber插件_2020全套AE基础入门(下),入门首选!
  13. 转:Apache2 httpd.conf 中文版
  14. 自动对焦模式与af区域模式_什么是自动对焦,不同模式意味着什么?
  15. 【皇室战争】使用Clash Royale API,构建你的皇室应用
  16. Pyecharts概览
  17. 复旦大学高等代数期末考试班级前几名
  18. 私链多节点的创建部署
  19. android HID添加(三) ---applist key
  20. [Unity3d]unity从入门到精通官方教程

热门文章

  1. 分享一个开源的流程图绘制软件--Diagram Designer
  2. 网络协议和标准——IEEE802
  3. FPGA零基础学习:数字电路中的数字表示
  4. 神经元模型和BP网络
  5. ​有哪些比较好的录制游戏视频软件​,游戏录屏软件哪个好用
  6. python魔兽挂机_魔兽怀旧服玩家有多难?为了不用重新排队,自制绝不封号的外挂!...
  7. 华为网络,模拟器ensp的基本使用
  8. mysql front不能上到_mysqlfront不能上到Mysql服务器连接quot;192.168.5.*_MySQL
  9. AutoRunner 功能自动化测试项目实训之第一个实战案例(四)
  10. WebService-服务端与客户端