
数据结构笔记
瞎写的一些东西
月明荞麦14106
顶上有神明,心中有明月
展开
-
散列表(哈希表)—散列查找代码书写(C语言)
王道数据结构上查找一章有散列表的相关介绍,却没有提供对应代码,但是做题时有些题用散列表会很方便,在此提供散列表相关代码。开放地址法几乎不会用到,它丧失了散列表最常用的地,即方用散列函数寻找关键字位置,所以下面提供的是拉链法相关代码数据结构typedef struct LNode//链表节点{ ElemType data; struct LNode *next;}LNode;typedef struct HashTable//散列表{ LNode *TheList[MaxSize];//指原创 2021-08-21 18:19:49 · 1297 阅读 · 0 评论 -
查找数组中两两之和等于X的整数对(C语言实现)
王道数据结构线性章节的思维拓展一个长度为N的整形数组A[1…N],给定整数X,设计一个时间复杂度不超过O(nlog2^n)的算法,查找数组中所有两两之和等于X的整数对(每个元素只输出一次)书上有可以用排序做,思考是否有其它解法我想到的是用散列表,用拉链法构建给定数组的散列表,然后 从头开始寻找匹配值,如A[1]=3,X=10,要找到7,就是用散列查找寻找7算法代码//用散列查找来寻找两数之和等于x的整数对void Pairing_01(ELemType a[], int N, ELemType原创 2021-08-21 12:29:57 · 1643 阅读 · 3 评论 -
C语言链表翻转算法(包含递归算法和非递归算法)
C语言链表翻转算法递归算法Linklist reverselist_rec(LNode *L, LNode *P)//带头结点递归算法{ LNode *N = P; if (P->next == NULL)//当访问到最后一个节点时返回 { L->next = P; return P; } P = reverselist_rec(L, P->next);//返回的节点P是当前节点N的后一个节点 P->next = N;//使返回的节点指向当前节点来实现逐级翻原创 2021-07-11 22:49:18 · 186 阅读 · 0 评论 -
顺序表涉及移动元素的算法杂谈(C语言实现)
第一种算法借助辅助数组void move_elem(int a[],int n, int p){ int *b = (int *)malloc(sizeof(int)*p);//定义辅助数组b[] for (int i = 0; i < n; i++) { if (i < p) b[i] = a[i]; else a[i - p] = a[i]; } for (int i = n-p,j=0; i < n; i++,j++) { a[i] = b[原创 2021-07-14 23:37:27 · 333 阅读 · 3 评论 -
删除无序顺序表中的重复元素(C语言实现)
王道数据结构上有道题,删除无序的顺序表中重复元素,提示是用散列表,自己试着实现了一下算法设计思想关键之处在于利用散列表的冲突来判断元素是否存在重复。于是解决散列表冲突的方式只能用拉链法,不能用开放地址法。散列表有数组和多个链表组成。数组里存储的是对应单个链表的首地址,链表中数据域用存储同义词。通过散列函数找到对应位置,继而判断是否存在相同元素。算法代码void DeleteSame(Seqlist *L){ int p = L->len; LNode *S; int H[M] = {原创 2021-07-12 19:16:00 · 8365 阅读 · 8 评论