课程设计备份

这是一个使用C语言编写的程序,包括顺序表的初始化、插入操作,二叉树的创建和中序遍历,以及栈的使用。用户可以选择生成随机数填充顺序表,构造二叉排序树,并进行中序遍历。
摘要由CSDN通过智能技术生成
#include
#include
#include
#include
#define SIZE 100
#define INCREASE 10 
struct node{
  int data[100]; 
  int length;//当前长度 
}L;
/顺序表
typedef struct tree{
   int data;
   struct tree *rchild,*lchild;
   }*BTree,Bnode;
二叉树
struct stack{
  struct tree *elem[SIZE];       
       int length; 
  }T;
栈
int caidan();
int Initline(struct node &L);//初始化顺序表
int Initstack(struct stack &T);//初始化栈 
int lineinsert(int e,struct node &L);//入顺序表 
void CreatTree(BTree &p);//创建二叉树
BTree InsertTree(BTree p,int key);//搜索二叉树 
//int InOrder(BTree &p);//中序遍历 
int ZXBL(BTree p);//中序遍历 
void push(struct stack &T,struct tree *e);//入栈 
void Pop(struct stack &T,struct tree *(&e));//取栈顶元素


 
int main(){
system("color 5E");
struct tree *p;
int i,j,n,k,a,c;
int b[100];
while(1){
k=caidan();
if(k==1){
   Initline(L);
   printf("\t请输入伪随机数个数:");
   scanf("%d",&n);
for(i=0;i
       j=1+rand();
    lineinsert(j,L);  
            }
    printf("\n\t生成的排序表为:");
for(i=0;i
printf("%d ",L.data[i]);
printf("\n");
    }
if(k==2){ 
CreatTree(p);
printf("\t构造二叉排序树成功!");
printf("\n");
    }
if(k==3){
   printf("\t");
ZXBL(p);
   printf("\n"); 
   } 
if(k==4){
   n++;
   printf("%d\n",n);
printf("\t请输入要插入的元素:");
   scanf("%d",a);
   L.data[n-1]=a;
   printf("\t输出元素\n");
   printf("\t");
   for(i=0;i
       printf("%d ",L.data[i]);
       printf("\n");
   }
}
//InOrder(p);
system("pause");
return 0;
}
int Initline(struct node &L){
    L.length=0;
return 0; 
}
int lineinsert(int e,struct node &L){
L.data[L.length]=e;
L.length++;
return 0;
}
///
void CreatTree(BTree &p){//创建二叉树
 int i=0;
 p=NULL;
 while(1){
     p=InsertTree(p,L.data[i]);
 i++;
 if(i==L.length) break;
     }    
}
BTree InsertTree(BTree p,int key){//插入
 BTree q=p;  
 BTree f,s;  
 while(q!=NULL){
     f=q;
 if(key==q->data)  return q;
 if(keydata)   q=q->lchild;
 else q=q->rchild;
 }
 s=(BTree)malloc(sizeof(Bnode));
 s->data=key;
 //printf("%d     ",key);
 s->lchild=NULL;
 s->rchild=NULL;
 if(p==NULL) return s;
 if(keydata) f->lchild=s;
 else f->rchild=s;
 return p;  
}
int Initstack(struct stack &T){
    T.length=0; 
    return 0;
}
void push(struct stack &T,struct tree *e){
     T.elem[L.length]=e;    
     T.length++;      
} 
void Pop(struct stack &T,struct tree *(&e)){
e=T.elem[T.length-1];    
     T.length--;    
}
 
int ZXBL(BTree p){
if(p!=NULL){
ZXBL(p->lchild);
printf("%d ",p->data);
ZXBL(p->rchild); 
}
    return 0;
}
int caidan(){
int i;
printf("\t********************************************************\n");
printf("\t*  (1)生成一个顺序表L                                  *\n");
printf("\t*  (2)对顺序表构造二叉排序树                           *\n");
printf("\t*  (3)利用栈结构实现中序遍历                           *\n");
printf("\t********************************************************\n");
printf("\t请选择:1-3:");
scanf("%d",&i);
return i;
} 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值