数据结构代码
个人的数据结构代码笔记
是落落呢
这个作者很懒,什么都没留下…
展开
-
链式存储的直接插入排序
#include<stdio.h>#include<malloc.h>typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next; /* data */}Node,*LinkList;//头插法void head_creat_list(LinkList *p, int n){ //n是容量 *p = (Node *)mal原创 2021-11-18 12:53:23 · 281 阅读 · 0 评论 -
稀疏矩阵转置
void invert(THREE *t, THREE *M){ int first = 0; M->y = t->x; M->x = t->y; M->n = t->n; for(int p=1; p<=t->y; p++){ for(int q=0; q<t->n; q++){ if(t->ARRAY[q].j == p){ M原创 2021-11-14 06:10:35 · 488 阅读 · 0 评论 -
图的广度优先遍历
#include"stdio.h"#include"malloc.h"#define SIZE 10/*************队列************/#define INITSIZE 10#define INNCREASE 5typedef int ElemType; typedef struct{ ElemType *base; ElemType *front; ElemType *rear; int length; int size;原创 2021-11-14 03:41:57 · 89 阅读 · 0 评论 -
图的邻接表创建(无向图)
#include"stdio.h"#include"malloc.h"#define SIZE 10typedef struct edgeNode{ //边节点 int pos; int value; struct edgeNode *next;}edgeNode;typedef struct vexNode{ //顶点节点 int data; edgeNode *firstNode;}Vexs[SIZE];typedef stru原创 2021-11-14 02:53:06 · 800 阅读 · 0 评论 -
图的邻接矩阵创建(无向图)
#include"stdio.h"#define SIZE 10typedef struct{ int e_num; //边数 int n_num; //顶点个数 int links[SIZE][SIZE]; //邻接矩阵 char vexs[SIZE];}Graph;void build(Graph *ph){ int edge,node; printf("输入顶点个数:"); scanf("%d",&node);原创 2021-11-14 01:05:36 · 534 阅读 · 0 评论 -
二叉树非递归遍历完整版
#include<stdio.h>#include<malloc.h>#include<stdbool.h> //树typedef int ElemType;typedef struct Node{ struct Node *lchild; ElemType data; struct Node *rchild; /* data */}Node,Tree;Tree * create_tree(Tree *t){//原创 2021-10-14 13:23:01 · 114 阅读 · 0 评论 -
队列之顺序存储
队列的顺序存储,一个很大的缺点就是造成内存资源的浪费, 头尾指针均不断后移,前面的内存就被浪费了,这才引入了循环队列。#include<stdio.h>#include<malloc.h>#define INITSIZE 10#define INNCREASE 5typedef int ElemType; typedef struct{ ElemType *base; ElemType *front; ElemType *rear;原创 2021-10-07 18:08:08 · 126 阅读 · 0 评论 -
栈的链式存储
栈的链式结构,不需要考虑栈满的问题,但是不能依赖于top指针(双向链表除外),需要从链表的第一个节点开始遍历,直至找到top所指的节点。top指针指向的节点一般都有脏数据,因为这个节点只占了内存空间,并没有其他操作。#include<stdio.h>#include<malloc.h>typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;}Node;原创 2021-10-07 16:59:59 · 198 阅读 · 0 评论 -
链式二叉树的创建
#include<stdio.h>#include<malloc.h>typedef int ElemType;typedef struct Node{ struct Node *lchild; ElemType data; struct Node *rchild; /* data */}Tree, *BTree;BTree create_tree(BTree t){//先序创建 ElemType ch; scan原创 2021-07-28 12:28:13 · 410 阅读 · 0 评论 -
循环队列之顺序存储
#include<stdio.h>#include<malloc.h>#define INITSIZE 10typedef int ElemType;typedef struct{ ElemType *base; int front; int rear; int length; int size;} Queue, *ptr;void init(ptr p){ p->base = (ElemType *)mall原创 2021-07-24 13:52:02 · 66 阅读 · 0 评论 -
队列的链式表示
#include<stdio.h>#include<malloc.h>typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;}Node, *ptr;typedef struct{ ptr front; ptr rear; int length;}Queue, *pptr;void init_queue(pptr q){原创 2021-07-24 12:10:04 · 52 阅读 · 0 评论 -
栈的顺序存储
栈只是一种具有特殊规则的线性表,它的操作原理和线性表几乎相同。#include<stdio.h>#include<malloc.h>#define INIT_SIZE 1#define INCREASE 10typedef int ElemType;typedef struct { ElemType *top; ElemType *base; int length; int size; /* data */}Stack,原创 2021-07-24 00:39:18 · 71 阅读 · 0 评论 -
顺序表之双向链表
文章目录双向链表双向循环链表双向链表双向链表的操作和单链表几乎相同,只是多了一个前域指针。#include<stdio.h>#include<malloc.h>typedef int ElemType;typedef struct Node{ struct Node *prior; ElemType data; struct Node *next; /* data */}Node, *Head;void init_head(He原创 2021-07-23 02:31:02 · 138 阅读 · 0 评论 -
静态链表(C)
静态链表同时具备链式存储和顺序存储的优点。可以直接通过下标查找;添加删除元素时不需要移动元素。其本身还是顺序存储,只是数组中用了个游标指出下一个元素的相对位置。datacur初始化,[0]是数据链表表头;[1]是备用链表表头。下标元素游标021022016320654203852071062024720908204992053102087链式的顺序为 2原创 2021-07-23 00:19:16 · 42 阅读 · 0 评论 -
线性表的链式存储
#include<stdio.h>#include<malloc.h>typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next; /* data */}Node, *Head;//头插法void head_creat_list(Head p, int n){ //n是容量 /* p = (Head)malloc(sizeof原创 2021-07-22 14:31:44 · 68 阅读 · 0 评论 -
线性表的顺序表示
包括结构体,初始化,插入,删除,查找功能。#include<stdio.h>#include<malloc.h>#define INIT_SIZE 10#define INCREASESIZE 10typedef int ElemType;typedef struct { ElemType *elem; int length; int listsize; /* data */}SqList;void Init(SqLis原创 2021-07-20 21:10:34 · 53 阅读 · 0 评论 -
堆排序(C)
堆排序相比于之前的排序难度可能较大一些,其实不是算法本身,而是对于堆的理解和代码编写感到陌生。Ki <= K2iKi <= K2i+1满足这个条件的堆称为小顶堆;Ki >= K2iKi >= K2i+1满足这个条件的堆称为大顶堆;其实堆是一种更容易让人理解的图像表示,它的本质还是一维数组,只是下标的比较是i,2i,2i+1之间的比较。堆排序就是先将初始序列排成大顶堆(小顶堆),然后取出堆顶元素,将剩下的元素再排列成大顶堆(小顶堆),这样就会得到一个有序的序列。#in原创 2021-07-19 22:02:41 · 60 阅读 · 0 评论 -
插入排序(三)之表插入
表插入排序采用链式存储,避免了元素移动。而且采用的是静态链表静态链表的结构:keynexteg:MAXINT4938659776132749681504723#include<stdio.h>#include<stdlib.h>#include<time.h>#define SIZE 10typedef int RcdType;typedef struct { R原创 2021-07-18 10:36:48 · 154 阅读 · 0 评论 -
插入排序(二)之2路插入排序
2路插入排序借助辅助数组减少了插入过程的移动次数,通过循环数组,实现头尾两端都可以插入(所以叫2路插入排序)。这个排序使用空间换时间include"../init.h"//二路插入//循环数组void Two_PathSort(RedType *node){ int i,j; RedType list[MAXSIZE]; list[0] = node[0]; int first,final; first = final = 0; for(i = 1原创 2021-07-18 02:59:55 · 456 阅读 · 0 评论 -
希尔排序(C)
希尔排序希尔排序的本质还是直接插入排序影响直接插入排序速度的两个因素:是否基本有序序列长度我们发现基本有序且长度较短的速度更快。所以希尔排序选择由大到小的不同增量使原序列满足这两个特点。#include"../init.h"//希尔排序//dlta[]是增量数组void ShellSort(RedType node[], int dlta[], int len){ //len 是dlta[]数组的长度 int k = 0; for(; k< len;原创 2021-07-18 00:17:10 · 74 阅读 · 0 评论 -
插入排序(一)
文章目录直接插入排序折半插入排序希尔排序直接插入排序//直接插入void InsertSort(RedType node[]){ RedType media; int i,j; for(i=1; i<MAXSIZE; i++){ //如果待插入元素比已排好序列的最大值大,则不需要向前查找,直接下一个元素 if(node[i].key < node[i-1].key){ media = node[i];原创 2021-07-18 00:14:06 · 57 阅读 · 0 评论 -
归并排序(C)
归并排序也是典型的分治算法#include"../init.h"void Merge(RedType *old_node, RedType *new_node, int start, int mid, int end){ int i,j,k; for(k=i=start,j=mid+1; i<=mid&&j<=end; k++){ if(old_node[i].key > old_node[j].key){原创 2021-07-17 18:43:14 · 79 阅读 · 0 评论 -
快速排序(c)
快速排序是通过一趟排序,确定某一个元素的位置,然后将分为左右两部分,左边都比这个元素小,而右边都比这个元素大,然后左右两边继续快速排序。快速排序是典型的的分治算法#include"../init.h"//一趟排序int part(RedType *node, int low, int high){ KeyType point = node[low].key; while(low < high){ while(low < high &&原创 2021-07-17 15:01:14 · 138 阅读 · 0 评论 -
起泡排序(冒泡排序)
起泡排序,也称冒泡排序,是比较相邻的两个元素,把较大的放到靠后的位置。每一趟排序结束,都把当前未排好的序列中最大值放到末尾。#include"../init.h"void old_bubblesort(RedType *node){ int i,j,temp; for(i=1;i<MAXSIZE;i++){ for(j=0;j<MAXSIZE-i;j++){ if(node[j].key>node[j+1].key){原创 2021-07-17 14:39:16 · 1721 阅读 · 0 评论 -
排序算法的自定义头文件
排序算法共用的同一类型的结构体//struct.h#define MAXSIZE 10typedef int KeyType;typedef char InfoType;typedef struct { KeyType key; InfoType info; /* data */}RedType;typedef struct{ RedType r[MAXSIZE]; int length; /* data */}Sqlist;原创 2021-07-17 14:33:56 · 166 阅读 · 0 评论