实验报告二
实验课名称:数据结构与程序设计实验实验名称:顺序班级:学号:姓名:时间:一、问题描述
顺序栈
顺序的C语言描述
基本运算的算法——置空、、
链栈的C语言描述
基本运算的算法——置空、、
循环队列的C语言描述
基本运算的算法——
链队列的C语言描述
基本运算的算法——
顺序栈
typedef struct{ //定义栈的数据结构
SElemType *base; //栈底指针
SElemType *top; //栈顶指针
int stacksize; //栈当前存储大小
}sqstack;
链栈
typedef struct StackNode{
SElemType data; //数据域
struct StackNode *next; //结点指针
}StackNode,*LinkStack;
循环队列
typedef struct{
QElemType *base;
int rear; //队尾
int front; //队首
int count; //队内元素数目
int size; //队列存储大小
}sqQueue;
为了方便循环队列判定队满队空,故加了一个数据域存储当前元素个数。
链队列
typedef struct QNode{ //结点结构体
QElemType data; //数据域
struct QNode *next; //指针域
}QNode,*QueuePtr; //结点,节点指针
typedef struct{ //队列结构体
QueuePtr front; //头指针
QueuePtr rear; //尾指针
}LinkQueue;
算法设计
顺序栈
构造空栈:malloc分配内存;
判断是否分配失败,失败则exit
S.top=S.base;初始化栈顶
初始化存储容量
置空栈:S.top=S.base; 栈顶重新指向栈底
判栈空:if(S.top==S.base);
判栈满:if(S.top-S.base>=S.stacksize);看栈首尾差距是否>=栈当前存储大小
进栈:判栈满;若满realloc重新分配内存
判断是否分配失败,失败则exit
S.top=S.base+S.stacksize;赋值新栈顶
S.stacksize+=stackincrement;赋值给新的当前存储大小
*S.top++=e; 进栈元素赋值给top后,top上移
出栈:判栈空,若空返回error
e=*--S.top;,下移top指针后赋值给e
读取栈顶元素:判栈空,若空返回error
e=*(S.top-1); 顶元素赋值给e
输出栈:for循环输出,须满足条件top>base
链栈
构造空栈:malloc分配内存;
判断是否分配失败,失败则exit
S->next=NULL;使指针指向空
判栈空:if(!S->next)判断s是否指向空指针
置空栈:暂存S的下一个节点指针到p
while(p)循环 q=p 把p赋值给q
p=p->next; p指向下一个
释放q
通过该循环则从第一个结点开始逐个释放到最后一个
进栈:定义结点指针p,通过while(p->next)循环使其指向栈顶结点
malloc分配结点内存;
判断是否分配失败,失败则exit
新节点的数据域赋值e;
p指向新结点
新节点指向空
出栈:判栈空,若空返回error
定义结点指针p和q,通过while(p->next)循环使p指向栈顶,q指向栈顶前一个
把p的数据域赋值给e
释放p
q的指针指向空
读取栈顶元素:判栈空,若空返回error
定义结点指针p,通过while(p->next)循环使其指向栈顶结点
把p的数据域赋值给e
循环队列
构造空队列:malloc分配内存;
判断是否分配失败,失败则exit
初始化队首、队尾、队内元素个数为0
初始化队列存储空间
置空队列:将队首、队尾、队内元素个数重新置0
判空队列:if(Q.count==0)
入