1.二叉树
#include "binary_tree.h"
/*------------二叉树新结点的创建------------*/
node_p create_new_node_dinary_tree(datatype newdata)
{
node_p New_node=(node_p)malloc(sizeof(node));
if(New_node==NULL)
{
printf("空间申请失败\n");
return NULL;
}
New_node->data=newdata;
New_node->lchild=NULL;
New_node->rchild=NULL;
return New_node;
}
/*---------------二叉树的创建---------------*/
node_p create_dinary_tree(void)
{
datatype newdata='\0';
printf("请输入\n");
scanf("%c",&newdata);
getchar();
if(newdata=='#')
{
return NULL;
}
node_p Root_node=create_new_node_dinary_tree(newdata);
printf("左子树");
Root_node->lchild=create_dinary_tree();
printf("右子树");
Root_node->rchild=create_dinary_tree();
return Root_node;
}
/*------------二叉树的前序遍历-------------*/
void show_preorder(node_p Root_node)
{
if(Root_node==NULL)
{
return;
}
printf("%c\t",Root_node->data);
show_preorder(Root_node->lchild);
show_preorder(Root_node->rchild);
}
/*------------二叉树的中序遍历-------------*/
void show_inorder(node_p Root_node)
{
if(Root_node==NULL)
{
return;
}
show_inorder(Root_node->lchild);
printf("%c\t",Root_node->data);
show_inorder(Root_node->rchild);
}
/*------------二叉树的后序遍历-------------*/
void show_postorder(node_p Root_node)
{
if(Root_node==NULL)
{
return;
}
show_postorder(Root_node->lchild);
show_postorder(Root_node->rchild);
}
2.快速查找
/*------------一次快排-----------*/
int once_quick_sort(int* arr,int low,int high)
{
int basic=*(arr+low);
while(high!=low)
{
while(high>low&&basic<*(arr+high))
{
high--;
}
*(arr+low)=*(arr+high);
while(high>low&&basic>*(arr+low))
{
low++;
}
*(arr+high)=*(arr+low);
}
*(arr+low)=basic;
return low;
}
/*------------整体快排-----------*/
void quick_sort(int* arr,int low,int high)
{
if(high>low)
{
int ret=once_quick_sort(arr,low,high);
quick_sort(arr,low,ret-1);
quick_sort(arr,ret+1,high);
}
}
3.直接插入查找
void insert_sort(int* arr,int len)
{
int i,j,t;
for(i=1;i<len;i++)
{
t=*(arr+i);
for(j=i;j>0&&*(arr+j-1)>t;j--)
{
*(arr+j)=*(arr+j-1);
}
*(arr+j)=t;
}
}
4.二分查找
int dinary_search(int* arr,int low,int high,int keyword)
{
while(high>=low)
{
int mid=(low+high)/2;
if(*(arr+mid)==keyword)
{
return mid;
}
else if(*(arr+mid)>keyword)
{
high=mid-1;
}
else if(*(arr+mid)<keyword)
{
low=mid+1;
}
}
return -1;
}
5.哈希查找
/*------------创建新结点------------*/
node_p create_new_node(newdata)
{
node_p New_node=(node_p)malloc(sizeof(node));
if(New_node==NULL)
{
printf("空间申请失败\n");
return NULL;
}
New_node->data=newdata;
New_node->next=NULL;
return New_node;
}
/*------------存入哈希表-----------*/
void insert_hash_chart(node_p* Hash_chart,int keyword)
{
int i=keyword%MAX;
node_p New_node=create_new_node(keyword);
New_node->next=*(Hash_chart+i);
*(Hash_chart+i)=New_node;
}
/*------------输出哈希表-----------*/
void show_hash_chart(node_p* Hash_chart)
{
if(Hash_chart==NULL)
{
printf("参数为空,请检查\n");
return;
}
int i;
for(i=0;i<MAX;i++)
{
node_p Hash_node=*(Hash_chart+i);
while(Hash_node!=NULL)
{
printf("%d-->",Hash_node->data);
Hash_node=Hash_node->next;
}
printf("NULL\n");
}
}