一顺序表
先定义一个数据结构,然后定义两个有元素的有序表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;
}