栈的基本操作和 二叉排序树的建立

本文介绍了使用C++实现栈的基本操作,包括初始化、进栈、出栈、显示栈底元素等功能,并展示了顺序栈的代码实现。此外,还详细讲解了如何通过键盘输入建立二叉排序树并进行中序遍历的过程。
摘要由CSDN通过智能技术生成

学号:2103103007   姓名:夏正超  博客名:计科211 夏正超

一、栈的基本操作

【实验算法描述】

栈的顺序表示和实现
顺序栈利用一组地址连续的存储单元依次存放自栈底到栈顶的数元素,同时附设指针top指示栈顶元素在顺序栈中的位置,利用一位数组实现栈的顺序存放。初始化顺序栈,

三、【程序代码】

#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top;        //栈 顶指针
} SeqStack;        //定义栈
typedef struct

{ElemType elem[MaxSize];

int front,rear;  //队首和队尾指针

} SqQueue:   //定义队列

//--初始栈函数

void InitStack(SeqStack *&s)

{

s=(SeqStack *)malloc(sizeof(SeqStack));
s->top=-1;

}
//---进栈函数
int Push(SeqStack *&s,ElemType e)

{
if (s->top==MaxSize- 1)
return 0;
s->top++;
s->data[s->top]=e;

return 1;

}
//--显示栈函数
void DispStack(SeqStack *s)
{
int i; .
for (i=s->top;i>=0;--)
printf("%c ",s->data[i]);
printf("\n"); 

}
//--显示栈底元素
void DispBottomStack(SeqStack *s)
printf("%c ",s->data[)];//先进后出,栈底元素为第一个 元素,即data[0] 
printf("\n"); .
/--判空栈函数
int StackEmpty(SeqStack *s)

{

return(s->top==-1);

}
//--出栈函数
int Pop(SeqStack *&s,ElemType &e)

{
if(s->top==-l)
return 0;
e=s->data[s->top];
s->top--;
return 1;
}
//--初始队列函数
void InitQueue(SqQueue *&q)
{
q=(SqQueue *)malloc (sizeof(SqQueue));
q-> front=q->rear=0;

}

//-入队列函数
int InQueue(SqQueue *&q,ElemType e)

{
if ((q->rear+ 1)%MaxSize==q->front)//队满
return 0;
q->rear=(q->rear+ 1)%MaxSize; 
q->elem[q->rear]=e;
return 1;
//--出队列函数
int OutQueue(SqQueue *&q.ElemType &e)

{
if(q-> front== =q->rear) //队空
return 0;
q->front=(q-> front+ 1)%MaxSize; .
e=q->elem[q-> front]; 
return 1;
}
//--判空队列函数

int QueueEmpty(SqQueue *q)
{
return(q->front= = =q->rear);

}
//--主程序.
void main()

{
ElemType e; 
SeqStack *s;
printf("(1)初始化栈s\n");
InitStack(s);
printf("(2)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(3)依次进栈元素a,b,c,d,e\n"); 
Push(s,’a’);//入栈元素1
Push(s,’b’);//入栈元素2
Push(s,’c’);//入栈元素3
Push(s,’d’);//入栈元素4

Push(s,’e’);//入栈元素5

printf("(4)栈为%s\n' ,(StackEmpty(s)?"空":"非空));
printf("(5)从栈顶到栈底元素:");DispStack(s);
printf("(6)栈底元素为:");DispBottomStack(s); 
printf("(7)出栈/入队列序列:");
SqQueue *q;
InitQueue(q);
while (!StackEmpty(s))

{
Pop(s,e);//出栈
printf("%c ",e);
InQueue(q.e);//入队
}
printf("\n"); .
printf("(8)栈为%s," ,(StackEmpty(s)?"空":"非空)); .
printf("队列为%s\I",(QueueEmpty(q)?"空""非空");
printf("(9)出队列/入栈序列:");

while (!QueueEmpty(q))

OutQueue(q,e);//出 队
Push(s,);//入栈
printf("%c ",e);
}
printf("\n");
printf("(10)栈为%s,",(StackEmpty(s)?"空":"非空));
print("队列为%s\n",(QueueEmpty(q)?"空":"非空));
free(q);//释放队列
printf("(11)从栈顶到栈底元素:"):DispStack(s);
free();//释放栈

}

四、【输出结果】

 

一:二叉排序树的建立

二、【实验算法描述】

编写能够通过键盘输入建立二叉排序树,并在建立完立即在屏幕显示中序遍历结果的程序

三、【程序代码】

#include<stdio.h>
#include<stdlib.h>
#define MAX 5
typedef struct Bnode

{
int key;
struct Bnode *left;
struct Bnode *right;
}Bnode;
Bnode * btInsert(int x,Bnode *root);
void Inorder(Bnode *root);
void main()

{
int i;
int a[MAX]={60,40,70,20,80};

Bnode * root=NULL;
printf("按关键字序列建立二叉排序树\n"); .
for(i=0;<MAX;i++) printf("%d ",a[i]);
printf("\n");
for(i=0;i<MAX;++) root=btInsert(a[i],root);
printf("中序遍历的二叉排序树\n"); 
Inorder(root);
printf("n");

}
Bnode * btInsert(int x,Bnode * root)
{
Bnode *p,*q;
int flag=0;
p=(Bnode *)malloc(sizeof(Bnode));
p->key=x;
p->right=p->left=NULL;
if(root==NULL)
{ root=p; return p; }
q=root;

while(flag==0)
{
if(q->key>x)

{
if(q->left!=NULL)
q=q->left;
else
{
q->left=p;
flag=1;
     }
}
else
{
if(q->right!=NULL)
q=q->right;
else
{

q->right=p;
flag=1;
      }
   }

}
return root;
}
void Inorder(Bnode *root)
if(root!=NULL)

{

Inorder(root->left);
printf("%d ",root->key);
Inorder(root->right);
    }
}

四、【输出结果】

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值