没有合适的资源?快使用搜索试试~ 我知道了~
首页王桂林解读:数据结构与算法深度解析
王桂林解读:数据结构与算法深度解析
需积分: 0 0 下载量 49 浏览量
更新于2024-06-15
收藏 4.22MB PDF 举报
"王桂林的《数据结构》PDF教程,作者提供了技术交流的QQ群,以及邮件联系方式。该教程包括了数据结构的基本概念、逻辑分类与物理存储,详细讲解了链表、栈等重要数据结构,并提供了相关的实现和应用示例。" 在王桂林的《数据结构》中,他强调了程序设计的核心是数据结构与算法的结合。教程分为多个章节,详细阐述了数据结构的基础知识。 首先,数据结构是组织和管理数据的方式,它定义了数据的逻辑结构和物理存储方式。教程中提到了逻辑分类,主要分为线性和非线性两种。线性数据结构如数组和链表,它们的元素按照特定顺序排列;非线性数据结构如树和图,元素之间存在多对多的关系。 接着,教程深入探讨了链表这一重要的线性数据结构。链表不同于数组,它的元素在内存中可以不连续存放,通过指针链接。链表分为单向链表和双向循环链表。单向链表只能向前遍历,而双向循环链表则可以在两个方向上遍历,并且首尾相接形成循环。对于这两种链表,教程都详细介绍了创建、插入、查找、删除、排序(节点交换和数据交换)以及销毁等操作。 链表的应用部分,王桂林给出了几个经典问题的解决方案,如如何逆序一个链表、判断链表是否存在环、找到链表的中间节点(仅使用一重循环)以及解决约瑟夫环问题。 此外,教程还涵盖了栈这一重要的数据结构,它遵循“后进先出”(LIFO)的原则。栈在实际编程中有着广泛的应用,例如括号匹配、深度优先搜索等。作者同样详细介绍了栈的基本概念、ADT(抽象数据类型)定义以及线式存储的实现方法。 这个教程详细地讲解了数据结构中的关键概念和实例,适合初学者和有经验的程序员作为参考学习,通过深入理解和实践,能够提升在程序设计中的数据处理能力。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/89015650/bg10.jpg)
原创作者: 王桂林 技术交流:QQ 329973169
更多视频:http://edu.nzhsoft.cn
- 14 -
}Stack;
void initStack(Stack *ps, int len);
int isStackFull(Stack *ps);
int isStackEmpty(Stack *ps);
char pop(Stack *ps);
void push(Stack *ps,char ch);
#endif
3.4.1.2.mystack.c
#include "mystack.h"
void initStack(Stack *ps,int len)
{
ps->_top = 0;
ps->_space = (char*)malloc(sizeof(char)*len);
ps->_len = len;
}
int isStackFull(Stack *ps)
{
return ps->_top == ps->_len;
}
int isStackEmpty(Stack *ps)
{
return ps->_top == 0;
}
char pop(Stack *ps)
{
return ps->_space[--ps->_top];
}
void push(Stack *ps,char ch)
![](https://csdnimg.cn/release/download_crawler_static/89015650/bg11.jpg)
原创作者: 王桂林 技术交流:QQ 329973169
更多视频:http://edu.nzhsoft.cn
- 15 -
{
ps->_space[ps->_top++] = ch;
}
3.4.2.链式存储实现
设计时选择表头,作为栈顶指针,而不是表尾(单向链表(不含头节点))。不同于
线式存储,不需要作判满操作。
3.4.2.1.mystack.h
#ifndef __MYSTACK_H__
#define __MYSTACK_H__
typedef struct _SNode
{
char _data;
struct _SNode * _next;
}SNode;
typedef struct _Stack
{
SNode * top;
}Stack;
void initStack(Stack * ps);
int isStackEmpty(Stack * ps);
void push(Stack *ps, char ch);
char pop(Stack *ps);
void clearStack(Stack * ps);
#endif
3.4.2.2.mystack.c
#include "mystack.h"
#include <stdio.h>
#include <stdlib.h>
![](https://csdnimg.cn/release/download_crawler_static/89015650/bg12.jpg)
原创作者: 王桂林 技术交流:QQ 329973169
更多视频:http://edu.nzhsoft.cn
- 16 -
void initStack(Stack * ps)
{
ps->top = NULL;
}
int isStackEmpty(Stack * ps)
{
return ps->top == NULL;
}
void push(Stack *ps, char ch)
{
SNode * cur = (SNode *)malloc(sizeof(SNode));
cur->_data = ch;
cur->_next = ps->top;
ps->top = cur;
}
char pop(Stack *ps)
{
SNode * t = ps->top;
char ch = t->_data;
ps->top = ps->top->_next;
free(t);
return ch;
}
void clearStack(Stack * ps)
{
SNode * t;
while(ps->top)
{
t = ps->top;
ps->top = ps->top->_next;
free(t);
}
![](https://csdnimg.cn/release/download_crawler_static/89015650/bg13.jpg)
原创作者: 王桂林 技术交流:QQ 329973169
更多视频:http://edu.nzhsoft.cn
- 17 -
}
3.5.应用
3.5.1.一组双栈
用一个数组表示两个堆栈,最大限度的利用空间,分别用数组的两端作为两个栈的
起点,向中间扩展,两个栈中的元素总和不超过 n 时,两个栈不会相遇。
3.5.2.深度优先搜索(打印地图版)
3.5.2.1.图示
3.5.2.2.代码
//1 代表墙,2 走过的路,0 代表路
int maze[MAXROW][MAXLINE] =
{
1,1,1,1,1,1,1,1,1,1,
0,0,0,1,1,1,1,1,1,1,
1,1,0,1,1,1,1,1,1,1,
1,1,0,0,0,0,1,1,1,1,
1,1,0,1,1,0,1,1,1,1,
1,1,0,1,1,0,1,1,1,1,
1,1,1,1,1,0,1,1,1,1,
1,1,1,1,1,0,0,0,1,1,
1,1,1,1,1,1,1,0,0,0,
![](https://csdnimg.cn/release/download_crawler_static/89015650/bg14.jpg)
原创作者: 王桂林 技术交流:QQ 329973169
更多视频:http://edu.nzhsoft.cn
- 18 -
1,1,1,1,1,1,1,1,1,1,
};
void displyMaze()
{
for(int i=0; i< MAXROW; i++)
{
for(int j=0; j<MAXLINE; j++)
{
if(maze[i][j] == 1) printf("%2s"," *");
else if(maze[i][j] == 2) printf("%2s"," #");
else printf("%2s"," ");
}
putchar(10);
}
printf(" ====================\n");
}
3.5.3.深度优先搜索(打印路径版)
#include <stdio.h>
#include "mystack.h"
#include <stdlib.h>
#include <unistd.h>
#define MAXROW 10
#define MAXLINE 10
//1 代表墙,2 走过的路,0 代表路
Stack s;
Point prePts[MAXROW][MAXLINE];
int maze[MAXROW][MAXLINE] =
{
1,1,1,1,1,1,1,1,1,1,
0,0,0,1,1,1,1,1,1,1,
1,1,0,1,1,1,1,1,1,1,
剩余143页未读,继续阅读
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://profile-avatar.csdnimg.cn/e2bbbb9687104e8dad49fc4b383dadbf_qq_43538607.jpg!1)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/user-vip.1c89f3c5.png)
八月的雨季997
- 粉丝: 711
- 资源: 39
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 中国微型数字传声器:技术革新与市场前景
- 智能安防:基于Hi3515的嵌入式云台控制系统设计
- 手机电量低时辐射真增千倍?解析手机使用谣言
- 56F803型DSP驱动的高精度大功率超声波电源控制策略研究
- ARM与GPRS结合的远程监测系统设计
- GPS与RFID技术结合的智能巡检系统设计
- CPLD驱动的低功耗爆炸场温度测试系统设计
- 基于FPGA的智能驱动控制系统:可扩展设计与工业网络协议
- 基于ATmega128和CH374的嵌入式USB接口设计
- 基于AT89C52的温度补偿超声波测距仪:高精度设计与应用
- MSP430F448单片机在交流数字电压表中的应用
- 提升变频器应用效率的12项实用技巧
- STM32F103在数字电镀电源并联均流系统中的应用
- PSpice仿真下的升压开关电源设计:拓扑分析与CCM稳定性提升
- 轻巧高效:MSP430主导的低成本无线传感器网络节点设计
- FPGA在EDA/PLD中实现LVDS接口的应用解析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)