数据结构
白山魁
杨超越码农后援会
展开
-
按字典序对字符串进行冒泡排序(C语言)
#include "stdio.h"#include "string.h"void bubble_sort(char ** pStrings);int main(void) { char strings[5][8] = {"ebadf", "qwerty", "assign", "execvp", "ghoul"}; char *pStrings[5]; int i; for (i = 0; i < 5; ++i) { pStrings[i..原创 2021-09-27 23:41:03 · 1336 阅读 · 0 评论 -
稀疏矩阵进行三元组压缩存储(golang实现)
1、使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等)2、把稀疏数组存盘(文件存储),并且可以重新恢复原来的二维数组package mainimport ( "bufio" "fmt" "io" "os" "strconv" "strings" "sync")type ValNode struct { row int col int val int}...原创 2020-04-01 15:17:13 · 1046 阅读 · 0 评论 -
买卖股票的最坏时机
给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能赔的最大损失。(是不是傻!?)注意你不能在买入股票前卖出股票。动态规划用来求:某个数组减去它右边的数字得到的一个数对之差,求所有数对之差的最大值。示例1:{2,4,1,16,7,5,11,9}数对之差最大值为11,是16减去5的结果...原创 2019-11-16 16:50:17 · 211 阅读 · 0 评论 -
广义表的深度和长度(C语言)详解
广义表的长度广义表的长度,指的是广义表中所包含的数据元素的个数。由于广义表中可以同时存储原子和子表两种类型的数据,因此在计算广义表的长度时规定,广义表中存储的每个原子算作一个数据,同样每个子表也只算作是一个数据。例如,在广义表 {a,{b,c,d}} 中,它包含一个原子和一个子表,因此该广义表的长度为 2。再比如,广义表 {{a,b,c}} 中只有一个子表 {a,b,c},因此它的长度...转载 2019-11-10 16:54:40 · 23794 阅读 · 3 评论 -
数组元素交换位置(奇数号元素在前,偶数号元素在后)
将顺序表(数组)中的元素a1,a2,a3,......,an变换为奇数号元素在前,偶数号元素在后的新表,即a1,a3,a5,...a2,a4,a6....要求尽可能高效。这里使用了数组模拟顺序表,数组首元素为A[0],顺序表首元素为a1,所以A[0]->a1;A[len-1]->an;#include<stdio.h>void Bubble_Swap(in...原创 2019-11-03 16:11:17 · 1115 阅读 · 0 评论 -
删除数组中指定值的元素
已知长度为n的线性表采用顺序结构,设计算法,保证时间复杂度为O(n),空间复杂度为O(1)的算法,删除线性表中元素值为item的数据元素。从笔试转为机考----->已知长度为n的数组,设计算法,保证时间复杂度为O(n),空间复杂度为O(1)的算法,删除数组中元素值为item的数据元素。#include<stdio.h>void Delete(int a[],in...原创 2019-10-30 16:35:03 · 668 阅读 · 0 评论 -
2016年408考研真题43题
#include<stdio.h>int setPartition(int a[],int n){ int pviot,low=0,low0=0,high=n-1,high0=n-1,flag=1,k=n/2,i; int s1=0,s2=0; while(flag){ pviot=a[low]; while(low<...原创 2019-10-20 19:15:59 · 1028 阅读 · 1 评论 -
荷兰国旗问题
荷兰国旗有三横条块,自上到下的三条块颜色依次为红、白、蓝。现有若干由红、白、蓝三种颜色的条块序列,要将它们重新排列使所有相同颜色的条块在一起。本问题要求将所有红色的条块放最左边、所有白色的条块放中间、所有蓝色的条块放最右边。且时间复杂度为O(n);#include<stdio.h>typedef enum{RED,WHITE,BLUE} color;//实际为 0,...原创 2019-10-08 18:33:38 · 521 阅读 · 0 评论 -
C语言版双向起泡排序
奇数趟时,从前往后比较相邻的关键字,遇到逆序就交换,直到把最大的数移动到最后;偶数趟时,从后往前比较相邻的关键字,遇到逆序就交换,直到把最小的数移动到最前。#include<stdio.h>void BubbleSort(int a[],int len){//双向起泡,交替进行正反两方向的冒泡排序 int low=0;int high=len;int temp...原创 2019-10-08 16:29:01 · 1122 阅读 · 2 评论 -
C语言版快速排序
分治法进行排序:(线性递归)#include<stdio.h> int PviottTops(int a[],int low,int high){ int pviot=a[low]; while(low<high){ while(low<high && a[high]>=pviot) --high; a[low]=a[high]...原创 2019-10-07 23:26:20 · 210 阅读 · 0 评论 -
C语言版冒泡排序
有哨兵版,待排数组下标从1开始:#include<stdio.h>int Bubble_Sort(int a[],int n){ for(int i=1;i<=n;i++){ for(int j=n;j>i;--j){ if(a[j]<a[j-1]){ a[0]=a[j];...原创 2019-10-07 23:06:16 · 197 阅读 · 0 评论