栈的链式存储,基本操作实现
(带头结点,不带头结点)
顺序队列的长度计算原理
公式=(rear-front+MAXQSIZE)%MAXQSIZE
分两种情况讨论:
1、rear>front (如MAXQSIZE=100,98>94)
此时可直接rear-front
2、front>rear (如MAXQSIZE=100,98>2)
当队列尾已经超出最大长度时,队列首可能还没有超出,比如最大长度为100,当队列尾为102时(此时rear里面存的已经是2(即102%100)了),而front可能还是98。此时就不能直接用rear-front来计算队列长度,就得使用(rear+MAXQSIZE-fornt),但此时第一种情况下不符合,因此需取模计算。
综合两种情况可得公式为:(rear-front+MAXQSIZE)%MAXQSIZE
//栈的链式存储
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
//数据类型描述 (定义)
typedef struct Linknode{
ElemType data;
struct Linknode *next;
}Linknode,*LiStack;
//初始化(带头结点)
bool InitStackWithHead(LiStack &S){
S = (LiStack)malloc(sizeof(Linknode)); //创建头结点
S->next = NULL;
return true;
}
//初始化(不带头结点)
bool InitStackNoHead(LiStack &S){
S = NULL;
return true;
}
//增加结点 (带头结点)
bool PushWithHead(LiStack &S,ElemType data){
Linknode *s; //创建新结点
s = (LiStack)malloc(sizeof(Linknode));
s->data