2024/03/19

本文介绍了使用C语言实现的哈希表(包括创建、插入、输出和查找功能),以及快速排序和二分搜索算法的简单实现。展示了如何通过这些基础数据结构和算法处理数据
摘要由CSDN通过智能技术生成

一、哈希表

1.创建哈希表

#define MAX 13
typedef struct node
{
	int data;
	struct node *next;
}node,*node_p;
	int arr[]={25,51,8,22,26,67,11,16,54,41};
	int len=sizeof(arr)/sizeof(arr[0]);
	int hash_len=len*4/3;
	node_p H[MAX]={0};

 2.创建新结点

node_p create_node(int data)
{
	node_p new=(node_p)malloc(sizeof(node));
	if(new==NULL)
	{
		printf("申请空间失败\n");
		return NULL;
	}
	new->data=data;
	return new;
}

3.存入哈希表

void insert(node_p H[],int key)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	int i = key%MAX;
	node_p new = create_node(key);
	new->next=H[i];
	H[i]=new;
}

4.输出哈希表

void show(node_p *H)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	for(int i=0;i<MAX;i++)
	{
		node_p p = H[i];
		while(p!=NULL)
		{
			printf("%d->",p->data);
			p=p->next;
		}
		printf("NULL\n");
	}
}

5.查找元素

void search(node_p *H,int key)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	for(int i=0;i<MAX;i++)
	{
		node_p p = H[i];
		while(p!=NULL)
		{
			if(p->data==key)
			{
				printf("该元素在哈希表第%d个\n",i);
				return;
			}
			p=p->next;
		}
	}
	printf("该元素不在哈希表内\n");
}

二、快速排序

#include<stdio.h>
int one_sort(int *arr,int low,int high)
{
	int base = arr[low];
	while(high>low)
	{
		while(high>low&&arr[high]>base)
		{
			high--;
		}
		arr[low]=arr[high];
		while(high>low&&arr[low]<base)
		{
			low++;
		}
		arr[high]=arr[low];
	}
	arr[low]=base;
	return low;
}
void sort(int *arr,int low,int high)
{
	if(high>low)
	{
		int ret = one_sort(arr,low,high);
		sort(arr,ret+1,high);
		sort(arr,low,ret-1);
	}
}
int main(int argc, char *argv[])
{
	int arr[]={34,78,56,90,12,100,26,76};
	int len = sizeof(arr)/sizeof(arr[0]);
	sort(arr,0,len-1);
	for(int i=0;i<len;i++)
	{
		printf("%d\n",arr[i]);
	}
      return 0;
}

三、二分排序

#include<stdio.h>
int search(int *arr,int low,int high,int key)
{
	int mid = (low+high)/2;
	if(arr[mid]==key)
	{
		return mid;
	}
	else if(high>=low)
	{
		if(arr[mid]>key)
		{
			mid--;
			return search(arr,low,mid,key);
		}
		if(arr[mid]<key)
		{
			mid++;
			return search(arr,mid,high,key);
		}
	} 
	return -1;
}
int main(int argc, char *argv[])
{
	while(1)
	{
		int arr[]={1,3,5,7,9,12,13,15,16,20};
		int len = sizeof(arr)/sizeof(arr[0]);
		int key;
		scanf("%d",&key);
		int a=search(arr,0,len-1,key);
		printf("查找的值的下标为%d\n",a);
	}
      return 0;
}

四、思维导图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值