顺序表实验和二叉树实验

一顺序表

先定义一个数据结构,然后定义两个有元素的有序表InitList L1、InitList L2和一个空表InitList L3。
•设定两个表的数据为a1[16], a2[16]。
•将两个有序表中的数按顺序比较大小,将小的数依次插入进空表中。如果两个元素相等则返回第一步循环。最后依次输出第三个表的元素。
 

#include<stdio.h>
struct InitList
{
	int *a;
	int size;
	int MaxLength;
};
int main()
{
	int a1[16]={1,5,7,9,14,17,26,29,32,36,39,47};
	int a2[16]={2,6,9,11,13,17,19,27,35,48,52,59};
	int a3[32];
	struct InitList L1={a1,12,16};
	struct InitList L2={a2,12,16};
	struct InitList L3={a3,0,32};
	int i,j,k;
	for(i=j=k=0 ; k<L3.MaxLength&&i<L1.size&&j<L2.size ; k++)
		{
			if(L1.a[i]>L2.a[j])
			{
				L3.a[k]=L2.a[j];
			    j++;
			}
			else if(L1.a[i]==L2.a[j])
			{
				L3.a[k]=L1.a[i];
				i++;
				j++;
			}
			else 
			{
				L3.a[k]=L1.a[i];
				i++;
			}
		}
		while(k<L3.MaxLength&&i<L1.size)
		{
			L3.a[k]=L1.a[i];
			k++;
			i++;
		}
		while(k<L3.MaxLength&&j<L2.size)
		{
			L3.a[k]=L2.a[j];
			k++;
			j++;
		}
		L3.size=k;
		printf("合并后的有序表为\n");
		for(k=0;k<L3.size;k++)
			printf("%4d",L3.a[k]);
		printf("\n");
		return 0;
 
}

二,二叉树

建立一棵二叉树。对此树进行前序遍历、中序遍历及后序遍历,输出遍历序列。
 

include <stdio.h>

#include <stdlib.h> 

 

typedef struct Node

{

char data;//存储数据

struct Node *LChild;//左儿子

struct Node *RChild;//右儿子

}BNode,*BTree;

 

void CreatBTree(BTree * bt)//创建二叉树 

{

char ch;

ch=getchar();

if(ch=='0')

{

*bt=NULL;

}

else 

{

*bt=(BTree )malloc(sizeof(BNode));

(*bt)->data=ch;

CreatBTree(&((*bt)->LChild));

CreatBTree(&((*bt)->RChild));

}

 

}

//依次输入: AB0D00CE0F000来先序创建二叉树

 

void PreOrder(BTree root)//先序遍历 

{

if(root)

{

//先序遍历先输出根节点,再输出左子树,再输出右子树

printf("%c ",root->data);

PreOrder(root->LChild);

PreOrder(root->RChild);

}

}

 

void InOrder(BTree root)//中序遍历 

{

if(root)

{

//中序序遍历先输出输出左子树,再输出根节点,最后再输出右子树

InOrder(root->LChild);

printf("%c ",root->data);

InOrder(root->RChild);

}

} 

 

void PostOrder(BTree root)//后序序遍历 

{

if(root)

{

//中序序遍历先输出输出右子树,再输出根节点,最后再输出左子树

PostOrder(root->LChild);

PostOrder(root->RChild);

printf("%c ",root->data);

} 

} 

 

int main()

{

/*int k;

printf("请输入节点个数",k);

scanf("%d",&k);

printf("%d\n",k);*/

BTree bt;

CreatBTree(&bt);

PreOrder(bt);

printf("\n");

InOrder(bt);

printf("\n");

PostOrder(bt);

printf("\n");

return 0;
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值