实验1.3 栈的基本操作的实现
一、实验目的:
掌握栈的顺序存储结构的实现方法,能够实现栈的基本操作。
二、实验内容:
建立一个有n个元素的顺序栈(用多次入栈来实现),并能够完成出栈及求栈长等基本操作。
1进入visual c++6.0集成环境。
2书写程序清单。注意如下问题。 栈顶指针的使用方法。
入栈如空间不够应该如何扩充。
如何进行数据的输入输出。
3调试程序,运行,输入数据。注意应输入一些边界数据和一些非法数据以证明算法的健壮性。
三、实验题目:
参照以前所学内容,思考并实现链栈的基本操作。 附:实验内容的程序清单。 #include \typedef struct {
int *base; int *top;
int stacksize;
}Sqstack;
int Initstack(Sqstack *S)
{
S->base=(int *)malloc(100*sizeof(int)); if(!S->base) exit(-2); S->top=S->base; S->stacksize=100; return 1; }
int Gettop(Sqstack *S,int *e) {
if(S->top==S->base) return 0; *e=*(S->top-1); return 1;
}
int Push(Sqstack *S,int e) {
if(S->top-S->base>=S->stacksize)
{
S->base=(int *)realloc(S->base,(S->stacksize+10*sizeof(int))); if(!S->base) exit(-2);
S->top=S->base+S->stacksize; S->stacksize+=10; }
*(S->top++)=e; return 1; }
int Pop(Sqstack *S,int *e) {
if(S->top==S->base) return 0; *e=*(--S->top); return 1;
}
int Stacklength(Sqstack S) {
return S.top-S.base; }
int emptystack(Sqstack S) {
if (S.top==S.base) return 1;
else return 0; } main() {
Sqstack S; int i,a,b,n;; Initstack(&S); scanf(\ for(i=1;i<=5;i++) Push(&S,i);
a=Stacklength(S); printf(\ Pop(&S,&b); printf(\ }
实验1.4 队列的基本操作的实现
一、实验目的:
掌握循环队列的实现方法,能够实现循环队列的基本操作。
二、实验内容:
建立一个空循环队列,并能够完成出队入队及求队长等基本操作。
1进入visual c++6.0集成环境。 2书写程序清单。注意如下问题。 循环队列应该使用顺序队列。
循环队列如何判断为空或者为满。
3调试程序,运行,输入数据。注意边界数据和非法数据的检测。
三、实验题目:
参照以前所学内容,思考并实现链队列的基本操作。 附:实验内容的程序清单。 #define MAXSIZE 100 #include \typedef struct { int *base; int front; int rear;
}SqQueue;
int Initqueue(SqQueue *q)
{
q->base=(int *)malloc(MAXSIZE*sizeof(int)); if(!q->base) exit(-2); q->front=0; q->rear=0;
return 1; }
int Enqueue(SqQueue *q,int e) {
if((q->rear+1)%MAXSIZE==q->front) return 0;
q->base[q->rear]=e;
q->rear=(q->rear+1)%MAXSIZE; return 1;
}
int Dequeue(SqQueue *q,int *e)
{
if(q->front==q->rear) return 0; *e=q->base[q->front];
q->front=(q->front+1)%MAXSIZE; return 1; } main() {
SqQueue Q; int e,a;
Initqueue(&Q); Enqueue(&Q,3); Enqueue(&Q,5); a=Dequeue(&Q,&e); if(a==0)
printf(\else {
printf(\ printf(\ } }??
实验二 二叉树遍历的实现
一、实验目的:
掌握二叉树的二叉链表的存储方法,能够实现二叉树的建立和三种递归遍历。
二、实验内容:
以二叉链表的存储结构建立一个二叉树,能够完成某种递归和非递归遍历。。
1进入Turboc2.0或Turboc3.0集成环境。
2书写程序清单。注意如下问题。
如何进行递归的建立一棵二叉树,数据输入应该如何表示才能结束。
遍历的递归和非递归是如何实现的,注意出口的书写。 3调试程序,运行,输入数据进行检测。
三、实验题目:
1、参照书中算法和以前所学内容,用递归方法和非递归实现计算二叉树所有叶子结点个数的程序。
附:实验内容的程序清单(先序建立一棵二叉树,并进行递归的先序遍历)。 #include \#include \
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;
void CreateBT(BiTree *T) {
char ch; scanf(\ if(ch==' ') *T=NULL; else {
if(!(*T=(BiTNode*)malloc(sizeof(BiTNode)))) exit(-2); (*T)->data=ch;
CreateBT(&(*T)->lchild); CreateBT(&(*T)->rchild);
} }
void visit(char ch) {
printf(\}
void PreorderBT(BiTree T) {
if(T)
{
visit(T->data); PreorderBT(T->lchild); PreorderBT(T->rchild); }
} Void in0rderBT(BiTree T) {
if(T)
{
in0rderBT(T->lchild); visit(T->data); in0rderBT(T->rchild);
} } Void
post0rderBT(BiTree T) {
if(T)