初识数据结构
1.数组
数组是数据结构的基础。
数组在程序中往往是从内存整体中分配出一块连续的空间,数组反映了内存的物理结构
2.数组的应用
以数组为基础的数据结构,可供各种各样的算法处理大量数据
3.数据结构概念
内存的物理结构无法改变,而数据结构可以通过程序在逻辑上改变内存的物理结构,使数据按照自己的相反分布
典型的数据结构如下:
栈的实现方法
1.栈的特点
栈中数据的使用顺序和堆积顺序是相反的,堆积顺序是从下到上,而使用顺序是从上到上,就好像干草堆一样
这种数据存取方式称为LIFO(last in first out,后进先出),即最后存入的数据最先被处理
2.栈的实现
#include <stdio.h>
// 构建数组作为栈的本体
char Stack[100];
// 栈顶指针,始终指向栈数据的最顶端
char StackPointer = 0;
// 入栈函数,存储数据
void Push(char Data){
// 数据存储在栈顶指针指向位置
Stack[StackPointer] = Data;
// 更新栈顶指针的值
StackPointer++;
}
// 出栈函数,读取数据
char Pop(){
// 更新栈顶指针的值
StackPointer--;
// 在栈顶指针处取出数据
return Stack[StackPointer];
}
// 运行实例
int main()
{
//存储数据
Push(1);
Push(2);
Push(3);
Push(4);
//读取数据
while (StackPointer !=0) {
char result = Pop();
printf("%d\n",result);
}
}
3.原理图
注意此图的栈底放在上面,最底部才是栈顶
4.语法解释
- 最终实现效果是:存入顺序是1,2,3,4;取出顺序是4,3,2,1
- 栈的成分:数组,栈顶指针,入栈函数,出栈函数
- 入栈函数将数据压入栈中
- 出栈函数将数据从栈中弹出
- 存储5个数据,最后栈顶指针指向5的地址(地址4为最后一个数据),所以在出栈函数中,栈顶指针需要减1,才能取得第一个数据
队列的实现方法
1.队列的特点
队列中最先存入的数据是被最先处理的,这种方式被称为FIFO(first in first out, 先进先出)。就像排队上车一样,先到的人就能先上车
2.队列的实现
#include<stdio.h>
// 构建作为队列本质的数组
char Queue[100];
// 标识数据存储位置的索引
char SetIndex = 0;
// 标识数据读取位置的索引
char GetIndex = 0;
// 存储数据函数
void Set(char Data){
// 存入数据
Queue [SetIndex] = Data;
// 更新存储索引
SetIndex++;
// 到达数组末尾则折回开头
if(SetIndex>=100){
SetIndex = 0;
}
}
// 读取数据函数
char Get(){
char Data;
// 读取数据
Data = Queue[GetIndex];
// 更新读取索引
GetIndex++;
// 到达数组末尾则折回开头
if(GetIndex>=100){
GetIndex = 0;
}
// 返回读出数据
return Data;
}
// 运行实例
int main()