大数据结构与算法源代码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
代码如下:
1.
void push(struct Stack * stack, DataType d) {
2.
if (stack-> == LISTSIZ)E
3.
return;
4.
stack->data [stack->++] = d;
5.
}
上述代码中,以下代码:
1.
if (stack-> == LISTSIZ)E
2.
return stack-> == 0;
3.
}
步骤四:入栈
精彩文档
实用标准文案
入栈是在栈中加入一个数据元素, 在入栈时, 首先需要判断栈是否为满, 如果栈满了, 则就不能在向其中添加元素了,判断栈是否满的操作只有在顺序存储结构才会出现,因为 采用顺序存储结构的栈是要事先定义栈的容量的。然后将数据元素放入栈中,并使栈顶指 针加 1,指向下一个位置。
实用标准文案
课程说明:数据结构一共四天课程, day01~~~day04.
CSD DataStructure DAY01
1. 基于顺序表的堆栈 2. 基于链式表的堆栈
1 基于顺序表的堆栈
栈是一种特殊的线性表,是限定在线性表表尾进行插入删除操作的线性表。由栈的概 念衍生出几个子概念,它们是:
1) 栈顶,即允许进行插入、删除操作的一端,又称为表尾,用栈顶指针 元素。
2.
return stack->data[ stack-> - 1];
3.
}
1.3 完整代码
本案例的完整代码如下所示:
1.
#include <stdio.h>
2.
#include <stdbool .h>
3.
4.
#define LISTSIZE10
精彩文档
实用标准文案
5.
typedef int DataType;
6.
struct Stack {
7.
DataType data[LISTSIZ]E;
8.
int ; // 处了记录大小 还可以记录栈顶位置
9.
};
10.
11.
void init (struct Stack * stack)
12.
{
13.
stack-> = 0;
14.
}
15.
16.
bool empty (struct Stack* stack) {
25.
26.
void pop(struct Stack* stack) {
27.
if (empty (stack))
28.
return;
29.
stack->--;
30.
}
31.
32.
DataType Data(struct Stack * stack) {
33.
return stack->data[ stack-> - 1];
是用一个宏常量来定义顺序表的容量,这样定义的好处是当需要修改顺序表的容量的
时候,只需要修改该宏常量即可。
上述代码中,以下代码:
1.
typedef int DataType;
是将数据类型 int 起了一个别名叫做 DataType ,并在后面的程序中只使用 DataType ,
而不使用 int 。这样做的好处是当堆栈中的数据类型发生变化时,
() 来指示栈顶
2) 栈底,即固定端,又称为表头
3) 空栈,即栈当中没有数据元素。
顺序栈是采用顺序存储结构的栈,即使用一组连续的存储单元(一般使用数组)来模 拟栈,依次存放栈中的数据元素。
1.1 方案
顺序栈的基本操作包括:
1) 初始化操作,在初始化操作中将建立一个空栈。
2) 判断栈空,判断栈中的数据元素个数是否为
是判断栈是否满,判断栈顶指针是否与栈的容量相等,如果是,则表示栈已经满了。
步骤五:出栈
出栈操作实际上是将栈中的栈顶元素删除,在出栈时,首先判断栈是否为空,如果栈 为空则代表栈中已经没有数据元素了,此时是不可能进行出栈操作的。然后,将栈顶指针 减 1。
代码如下:
1.
void pop(struct Stack* stack) {
0。
3) 入栈,在栈中加入一个数据元素。
4) 出栈,在栈中删除一个数据元素。
5) 取栈顶元素,将栈顶元素取出,但并不在栈中删除该元素。
1.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:定义栈
在 C 语言中: 1) 定义一个一维数组来表示栈的顺序存储空间。 2) 定义一个变量来指出栈顶的位置。 3) 这两方面的信息共同描述一个栈,可将它们用结构体封装在一起。 代码如下:
1.
#define LISTSIZE10
精彩文档
实用标准文案
2.
typedef int DataType;
3.
struct Stack {
4.
DataType data[LISTSIZ]E;
5.
int ; // 除了记录大小 还可以记录栈顶位置
6.
};
上述代码中,以下代码:
1.
#define LISTSIZE100
只需要修改此句中的 int
为要改变的数据类型,即可将程序中所有数据变量的数据类型变成指定的类型。
步骤二:初始化操作
在主程序中,定义栈结构体的变量。 在初始化函数中将该变量中的栈顶指针初始化为 代码如下:
0,表示为空栈。
1.
void init (strucΒιβλιοθήκη Baidu Stack * stack)
2.
{
3.
stack-> = 0;
4.
}
5.
int main(int argc, const char * argv[])
6.
{
7.
struct Stack stack;
8.
init (&stack);
9.
}
步骤三:判断栈空
判断栈空实际上是判断栈顶指针是否为 据元素。
代码如下:
0,因为当栈顶指针为 0 时,代表栈中没有数
1.
bool empty (struct Stack* stack) {
2.
if (empty (stack))
3.
return;
4.
stack->--;
5.
}
步骤六:取栈顶元素
取栈顶元素操作实际上是仅返回栈顶元素,而栈顶指针并不变动。在取栈顶元素时, 首先也要判断栈是否为空,因为空栈同样是不可能有数据元素的。
代码如下:
1.
DataType Data(struct Stack * stack) {
17.
return stack-> == 0;
18.
}
19.
20.
void push(struct Stack * stack, DataType d) {
21.
if (stack-> == LISTSIZ)E
22.
return;
23.
stack->data [stack->++] = d;
24.
}
1.
void push(struct Stack * stack, DataType d) {
2.
if (stack-> == LISTSIZ)E
3.
return;
4.
stack->data [stack->++] = d;
5.
}
上述代码中,以下代码:
1.
if (stack-> == LISTSIZ)E
2.
return stack-> == 0;
3.
}
步骤四:入栈
精彩文档
实用标准文案
入栈是在栈中加入一个数据元素, 在入栈时, 首先需要判断栈是否为满, 如果栈满了, 则就不能在向其中添加元素了,判断栈是否满的操作只有在顺序存储结构才会出现,因为 采用顺序存储结构的栈是要事先定义栈的容量的。然后将数据元素放入栈中,并使栈顶指 针加 1,指向下一个位置。
实用标准文案
课程说明:数据结构一共四天课程, day01~~~day04.
CSD DataStructure DAY01
1. 基于顺序表的堆栈 2. 基于链式表的堆栈
1 基于顺序表的堆栈
栈是一种特殊的线性表,是限定在线性表表尾进行插入删除操作的线性表。由栈的概 念衍生出几个子概念,它们是:
1) 栈顶,即允许进行插入、删除操作的一端,又称为表尾,用栈顶指针 元素。
2.
return stack->data[ stack-> - 1];
3.
}
1.3 完整代码
本案例的完整代码如下所示:
1.
#include <stdio.h>
2.
#include <stdbool .h>
3.
4.
#define LISTSIZE10
精彩文档
实用标准文案
5.
typedef int DataType;
6.
struct Stack {
7.
DataType data[LISTSIZ]E;
8.
int ; // 处了记录大小 还可以记录栈顶位置
9.
};
10.
11.
void init (struct Stack * stack)
12.
{
13.
stack-> = 0;
14.
}
15.
16.
bool empty (struct Stack* stack) {
25.
26.
void pop(struct Stack* stack) {
27.
if (empty (stack))
28.
return;
29.
stack->--;
30.
}
31.
32.
DataType Data(struct Stack * stack) {
33.
return stack->data[ stack-> - 1];
是用一个宏常量来定义顺序表的容量,这样定义的好处是当需要修改顺序表的容量的
时候,只需要修改该宏常量即可。
上述代码中,以下代码:
1.
typedef int DataType;
是将数据类型 int 起了一个别名叫做 DataType ,并在后面的程序中只使用 DataType ,
而不使用 int 。这样做的好处是当堆栈中的数据类型发生变化时,
() 来指示栈顶
2) 栈底,即固定端,又称为表头
3) 空栈,即栈当中没有数据元素。
顺序栈是采用顺序存储结构的栈,即使用一组连续的存储单元(一般使用数组)来模 拟栈,依次存放栈中的数据元素。
1.1 方案
顺序栈的基本操作包括:
1) 初始化操作,在初始化操作中将建立一个空栈。
2) 判断栈空,判断栈中的数据元素个数是否为
是判断栈是否满,判断栈顶指针是否与栈的容量相等,如果是,则表示栈已经满了。
步骤五:出栈
出栈操作实际上是将栈中的栈顶元素删除,在出栈时,首先判断栈是否为空,如果栈 为空则代表栈中已经没有数据元素了,此时是不可能进行出栈操作的。然后,将栈顶指针 减 1。
代码如下:
1.
void pop(struct Stack* stack) {
0。
3) 入栈,在栈中加入一个数据元素。
4) 出栈,在栈中删除一个数据元素。
5) 取栈顶元素,将栈顶元素取出,但并不在栈中删除该元素。
1.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:定义栈
在 C 语言中: 1) 定义一个一维数组来表示栈的顺序存储空间。 2) 定义一个变量来指出栈顶的位置。 3) 这两方面的信息共同描述一个栈,可将它们用结构体封装在一起。 代码如下:
1.
#define LISTSIZE10
精彩文档
实用标准文案
2.
typedef int DataType;
3.
struct Stack {
4.
DataType data[LISTSIZ]E;
5.
int ; // 除了记录大小 还可以记录栈顶位置
6.
};
上述代码中,以下代码:
1.
#define LISTSIZE100
只需要修改此句中的 int
为要改变的数据类型,即可将程序中所有数据变量的数据类型变成指定的类型。
步骤二:初始化操作
在主程序中,定义栈结构体的变量。 在初始化函数中将该变量中的栈顶指针初始化为 代码如下:
0,表示为空栈。
1.
void init (strucΒιβλιοθήκη Baidu Stack * stack)
2.
{
3.
stack-> = 0;
4.
}
5.
int main(int argc, const char * argv[])
6.
{
7.
struct Stack stack;
8.
init (&stack);
9.
}
步骤三:判断栈空
判断栈空实际上是判断栈顶指针是否为 据元素。
代码如下:
0,因为当栈顶指针为 0 时,代表栈中没有数
1.
bool empty (struct Stack* stack) {
2.
if (empty (stack))
3.
return;
4.
stack->--;
5.
}
步骤六:取栈顶元素
取栈顶元素操作实际上是仅返回栈顶元素,而栈顶指针并不变动。在取栈顶元素时, 首先也要判断栈是否为空,因为空栈同样是不可能有数据元素的。
代码如下:
1.
DataType Data(struct Stack * stack) {
17.
return stack-> == 0;
18.
}
19.
20.
void push(struct Stack * stack, DataType d) {
21.
if (stack-> == LISTSIZ)E
22.
return;
23.
stack->data [stack->++] = d;
24.
}