2022-9-21 ---代码的复习

#include<stdio.h>

/*********************快速插入排序******************************/
void insert_sort(int *arr,int n){
	int i,j;                    //循环变量
	int temp;                    //临时变量

	for(int i=1;i<n;i++){        //从前往后,遍历待排序序列
		int temp=arr[i];
		for(int j=i;j>0&&temp<arr[j-1];j--){
			arr[j]=arr[j-1];
		}
		arr[j]=temp;
	}
	printf("排序成功\n");
}





#if 0

/********************定义选择排序函数**************************/
void select_sort(int *arr,int n){
	for(int i=0;i<n;i++){       //控制待排序元素
		int index=i;          //将待排序的第一个当做最值
		for(int j=i+1;j<n;j++){     //在待排序数组中遍历找到最值
			if(arr[index]>arr[j]){
				index=j;        //此时找的是最小值---如果发现标记的最小值后后面有元素比他小,保存一下最小值的下标
			}
		}
		if(index!=i){              //判断最值是否为待排序序列中的第一个
			int t=arr[index];
			arr[index]=arr[i];
			arr[i]=t;     			//交换三部曲
		}
	}
	printf("排序成功\n");
}
#endif


int main(int argc, const char *argv[])
{
	int arr[]={10,52,96,87,14,25,36,95,14,78,10};	
	int len=sizeof(arr)/sizeof(arr[0]);
//	select_sort(arr,len);
	insert_sort(arr,len);

	for(int i=0;i<len;i++){
		printf("%d\t",arr[i]);
	}
	putchar(10);

	return 0;
}

//定义结点的类型
typedef int datatype;     //数据域

typedef struct Node{
	
	datatype data;  //数据域
	struct Node *next;   //指针域

}Node,*Nodepointer;

//初始化哈希表
void hash_init(Nodepointer hash[],int n);

//将元素放入哈希表中
void hash_insert(Nodepointer hash[],int n,int key);


//遍历哈希表
void hash_show(Nodepointer hash[],int n);

//哈希查找
int hash_search(Nodepointer hash[],int n,int key);





#endif

ubuntu@ubuntu:2022-9-19$ cat 11f.c
#include<stdio.h>
#include<stdlib.h>
#include"11.h"

//初始化哈希表
void hash_init(Nodepointer hash[],int n){
	//n 表示的是哈希表的表长
	//此处传过来了,指针数组的地址,利用for循环,对数组中的每一个元素进行初始化
	//都是置位为空就行了,不然会出现野指针
	for(int i=0;i<n;i++){
		hash[i]=NULL;
	}
	printf("初始化哈希表成功\n");
}

//将元素放入哈希表中
void hash_insert(Nodepointer hash[],int n,int key){
	
	//通过哈希函数将锁定的key 放在哈希表中的所在的位置
	int pos=key%n;       //key 所在的位置应该是hash[pos]这条链表
	//申请结点封装数据
	Nodepointer p=(Nodepointer)malloc(sizeof(Node));
	if(NULL==p){
		printf("空间申请失败\n");
		return;
	}
	p->data=key;
	p->next=NULL;
	//此结点已经创建好,并且此结点的指针域已经指向空
	//将封装的好的结点插入到hash[pos]----这条链表中
	p->next=hash[pos];
	hash[pos]=p;
	//此处的hash[pos]相当于一个头指针
}


//遍历哈希表
void hash_show(Nodepointer hash[],int n){
	for(int i=0;i<n;i++){
		printf("%d:",i);
		//定义遍历指针,遍历下标为i的链表
		Nodepointer q=hash[i];
		while(q!=NULL){
			printf("%d->",q->data);
			q=q->next;
		}
		printf("NULL\n");
	}
}

//哈希查找
int hash_search(Nodepointer hash[],int n,int key){
	//根据要查找的值确定所在的链表
	//利用哈希函数确定链表所在的位置
	int pos=key%n;
	//定义遍历指针,从当前链表的第一个结点出发
	Nodepointer q=hash[pos];
	while(q!=NULL&&q->data!=key){
		q=q->next;
	}
	//对q进行判断
	if(NULL==q){
		printf("您要找的元素不在表中\n");
		return -1;
	}else{
		printf("查找成功,您要找的值在表中\n");
		return 0;
	}	
}

#include"11.h"



int main(int argc, const char *argv[])
{
	
	
	
	int arr[10]={3,5,18,55,67,22,35,29,40,88};
	Nodepointer hash[13];       //定义哈希表
	//在此定义了一个结构体类型的指针数组---数组中的每一个元素都是指针
	//根据原来有10个元素计算可以求得,确定哈希表的长度为13
	

	//调用初始化哈希表
	hash_init(hash,13);

	//将所有的元素放入到哈希表中
	//此处的10个元素依次循环放入到哈希表中
	//根据哈希函数,利用哈希表的长度为13
	//然后分别放入到表中的不同的位置
	for(int i=0;i<10;i++){
		hash_insert(hash,13,arr[i]);
	}

	//调用遍历函数
	hash_show(hash,13);

	//调用哈希查找函数
	hash_search(hash,13,22);




	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值