数据结构
嘴角的浮浅
这个作者很懒,什么都没留下…
展开
-
Dijkstra算法(C语言实现)
Dijkstra算法用于求解单源点之间的最短路径,但是图中不能存在某条边的权为负数的回路。 Dijkstra就是指定某个源点u,之后去寻找到这个源点距离最短的边(u,v),并利用这条边对其他的边进行松弛的概念,之后不断循环往复直到结束。 这实际上是一个贪心的思想,但它确确实实找到的是最短路径。为什么呢?因为它每次选择的都是最短的路径,所以不可能存在还有一个点会使得源点到中转点的距离更小(因为当前路径已经是最短路径了)。 还有的就是某一次松弛后并不是最短的情况,如图所示 dis数组记录从源点到其他点的最短距离原创 2021-08-08 17:23:24 · 3132 阅读 · 0 评论 -
二叉树的先/中/后序遍历的非递归实现
//非递归的主要思想就是利用栈将三种遍历的递归函数手动实现 #include <stdio.h> #include <stdlib.h> #define M 255 //二叉树 typedef struct node{ char data; struct node *lchild,*rchild; }TreeNode,*BiTree; BiTree T; //栈 typedef struct Node{ BiTree data[M]; int top; }SqStack原创 2021-07-28 16:55:31 · 147 阅读 · 0 评论 -
链式二叉树
#include <stdio.h> #include <stdlib.h> #define M 255 typedef struct node{ char data; struct node *lchild,*rchild; }TreeNode,*BiTree; BiTree T; void visit(BiTree t){ printf("%c ",t->data); } void CreatTree(BiTree &T){ //利用先序遍历的原创 2021-07-23 20:49:05 · 71 阅读 · 0 评论 -
KMP算法
#include <stdio.h> #define M 255 typedef struct node{ char data[M]; int length; }SString; void Init_Str(SString &str){ str.data[0]='\0'; str.length=0; } int strlen(char s[]){ int i=0; while(s[i]!='\0'){ i++; } return i+1; } void S原创 2021-07-21 18:27:29 · 70 阅读 · 0 评论 -
串的顺序表实现(C语言)
#include <stdio.h> #define M 255 typedef struct node{ char data[M]; int length; }SString; void Init_Str(SString &str){ str.data[0]='\0'; str.length=0; } int strlen(char s[]){ //利用局部变量的返回 int i=0; while(s[i]!='\0'){ i++; } return i+原创 2021-07-20 16:40:36 · 103 阅读 · 0 评论 -
栈在括号匹配中的应用
#include <stdio.h> #include <string.h> #define M 50 typedef struct node{ char data[M]; int top; }SqStack; void InitStack(SqStack &S){ S.top=-1; } bool StackEmpty(SqStack &S){ if(S.top==-1){ return true; } else{ return false;原创 2021-07-18 17:30:22 · 74 阅读 · 0 评论 -
顺序栈C语言实现
#include <stdio.h> #define M 50 typedef struct node{ int data[M]; int top; }SqStack; void InitStack(SqStack &S){ S.top=-1; } bool StackEmpty(SqStack &S){ if(S.top==-1){ return true; } else{ return false; } } bool Push(SqStack &原创 2021-07-15 23:56:19 · 138 阅读 · 2 评论 -
单链表C语言实现(不带头结点)
#include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }LNode,*LinkList; bool InitList(LinkList &L){ //不带头结点 L=NULL; return true; } LinkList List_HeadInsert(LinkList &L){原创 2021-07-12 23:26:06 · 630 阅读 · 2 评论 -
链表的实现--C语言(待续)
#include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }LNode,*LinkList; bool InitList(LinkList &L){ L=(LNode *)malloc(sizeof(LNode)); //创建头结点 if(L==NULL){ return false; } L->next=NULL; ret原创 2021-07-09 23:37:30 · 143 阅读 · 3 评论 -
顺序表C语言实现(增删改查实现)
#include <stdio.h> #include <string.h> #include <stdlib.h> #define M 100 typedef struct node{ int *data; // int data[M] 静态分配 int Maxsize; int length; }SeqList; void InitList(SeqList &L){ L.data=(int *)malloc(sizeof(int)*M);原创 2021-07-08 23:47:28 · 187 阅读 · 2 评论