考研数据结构代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

线性表

一、顺序存储

1.顺序存储的静态分配

2.顺序存储的动态分配

3.顺序存储线性表的插入

4.顺序存储线性表的删除

二、链式存储

5.链式存储线性表的结构

6.头插法建立单链表

7.尾插法建立单链表

8.链式存储按序号查找结点

9.链式存储按值查找结点

10.链式存储插入结点

11.链式存储删除结点

12.双链表的结构

13.双链表的插入

14.双链表的删除

15.静态链表的结构

栈和队列

一、顺序栈

16.栈的结构17.判断栈空

18.进栈

19.出栈

20.读取栈顶元素

21.共享栈的结构

22.共享栈的进栈

二、链式栈

23.链式栈的存储结构

24.链式栈的进栈

25.链式栈的出栈

三、顺序队列

26.队列的存储结构

27.队列的入队

28.队列的出队

四、链式队列

29.链式队列的存储结构

30.链式队列的入队

31.链式队列的出队

五、栈的应用

32.栈的应用:括号匹配

34.栈的应用:求斐波那契数列的第n项树和二叉树

一、树的存储结构

35.树的双亲表示法

36.树的孩子表示法

37.孩子兄弟表示法

38.二叉树的链式存储

二、树的遍历

39.二叉树的递归先序遍历

40.二叉树的递归中序遍历

41.二叉树的递归后序遍历

42.二叉树的非递归先序遍历

43.二叉树的非递归中序遍历

44.二叉树的非递归后序遍历

45.二叉树的层序遍历

三、线索二叉树

46.线索二叉树的结构

47.中序遍历对二叉树线索化的递归算法

48.遍历线索二叉树

一、图的存储结构

49.图的邻接矩阵存储

50.图的邻接表存储

二、图的遍历51.图的广度优先搜索遍历(BFS)

52.BFS应用:单源非带权图最短路径

53.图的深度优先遍历(DFS)

三、图的最小生成树

54.求图的最小生成树(Prim算法)

55.并查集:查找某个集合的根结点(Kruskal 算法用到)

56.并查集:合并两个集合(Kruskal算法用到)

57.求图的最小生成树:(Kruskal算法)克鲁斯卡尔

四、图的最短路径

58.图的最短路径算法(Dijkstra算法)迪杰斯特拉

59.图的最短路径算法(Floyd算法)弗洛伊德

查找

60.折半查找

61.二叉排序树查找关键字(递归)

62.二叉排序树查找关键字(非递归)

63.二叉排序树插入关键字

64.二叉排序树构造代码

排序

65.直接插入排序

66.希尔排序

67.冒泡排序

68.快速排序

69.选择排序

70.堆排序

71.归并排序

73.拓扑排序

线性表

一、顺序存储

1.顺序存储的静态分配

#define MaxSize 50//定义线性表的最大长度

typedef int Elemtype//假定表中元素类型是int

typedef struct{

ElemType data[MaxSize];//顺序表的元素(数组)

int length ;//顺序表的当前长度

2.顺序存储的动态分配

typedef int Elemtype

typedef struct

{

ElemType *data ;//指示动态分配数组的指针

int MaxSize , length ;//数组的最大容量和当前个数

};

/* c语言的动态分配语句*/

#define InitSize 100

SeqList L;

L.data=(ElemType*)malloc(sizeof(ElemType) *InitSzie);

3.顺序存储线性表的插入

bool ListInset(Sqlist &L, int i , ElemType e){ if(i<1 || i>L.length+1) return false ;//判断i的范围是否有效

if(L.length >= MaxSize) return false ;//当前存储空间已满,不能插入

for(int j=L.length ; j>=i ; j--){//将第i个元素及之后的元素后移

L.data[j]=L.data[j-1];

}

L.data[i-1] = e ;//在位置i处放入e

L.length++ ; //线性表长度加1

return true ;

}

4.顺序存储线性表的删除

bool ListDelete(SqList &L , int i ,Elemtype &e){

if(i<1 || i>=L.length) return false;//判断i的范围是否有效

e = L.data[i];//将被删除的元素赋值给e

for(int j=i ; j<=L.length ; j++){//将第i个位置之后的元素前移

L.data[j]=L.data[j+1] ;

}

L.length--; //线性表长度减1

return true ;

}

二、链式存储

5.链式存储线性表的结构

typedef struct LNode //定义单链表结点类型

{

ElemType data ;//数据域

struct LNode *next; //指针域

}LNode, *LinkList;

6.头插法建立单链表

LinkList CreatLinkList(LinkList &L){

LNode *s ; //辅助指针

int x ;

L=(LinkList)malloc(sizeof(LNode)) ; //创建头结点

L->next = NULL ;//初始为空链表

scanf("%d" , &x) ;//输入结点的值

while(x != 9999){//输入9999表示结束s= (LNode*)malloc(sizeof(LNode)); //创建新结点

s->data = x ;

s->next = L->next ;

相关文档
最新文档