//自定义的数据内容DATA
typedef struct
{
int a;
float b;
}DATA;
顺序表
typedef struct
{
DATA * base;
int length;
}sqlist;
顺序表创建只需用 base 去 new一个足够的空间 -> sqlist L; L.base = new DATA [MAXSIZE]; 并设初始长度 L.length=0;
顺序表可以随机访问 -> L.base[i-1] (顺序表第i个数据元素) 所以无论是查找,插入,遍历都可用随机访问进行处理
顺序栈
typedef struct
{
DATA* base;
DATA* top;
int stacksize;
}sqstack;
栈的创建同样是用 base 去 new一个足够的空间,但区别在于栈的两个指针base和top只有top用于入栈和出栈使之可以后入先出,base只负责开辟空间的头地址 空栈 S.top=S.base;
入栈 -> DATA e; S.top++=e;
出栈 -> e=–S.top;
注意:top始终是栈顶元素的下一位,所以出入栈注意++ --的是前置还是后置
顺序队列
typedef struct
{
DATA* base;
int rear;
int front;
}sqquene;
队列的创建同样是用 base 去 new一个足够的空间,和顺序表区别在于用两个“指针”控制队列先入先出,起始时空队列 Q.front=Q.rear=0;
入队列 尾rear++,出队列 头front++
直线队列通常会浪费空间,所以我们直接使用循环队列
当(Q.rear+1)% MAXSIZE=Q.front时 队满, 当Q.rear=Q.front时队空
入队判断是否队满,若不满 -> Q.base[Q.rear]=e; Q.rear=(Q.rear+1)% MAXSIZE;
出队判断是否为空,若不空 -> Q.front=(Q.front+1)% MAXSIZE;