第一题:(哈希查找)
使用哈希存储将数据存入哈希表中,并进行查找
定义结构体类型
//定义节点结构体类型
typedef struct Node
{
int data; //数据域
struct Node *next; //指针域
}Node;
功能函数:
初始化哈希表
//初始化哈希表
void init_hash(Node *hash[])
{
for (int i=0; i<P; i++)
{
hash[i]=NULL;
}
printf("初始化成功\n");
}
将元素存入哈希表
//将元素存入哈希表
int insert_hash(Node *hash[],int x)
{
int index = x%P; //定位要存储的链表
//将数据封装成节点
Node *q=(Node *)malloc(sizeof(Node));
if (NULL==q)
{
printf("空间申请失败\n");
return -1;
}
q->data=x;
q->next=NULL;
//使用头插法将节点放入链表hash[index]
q->next =hash[index];
hash[index]=q;
return 0;
}
遍历函数
//查看表函数
void show_hash(Node *hash[])
{
for (int i=0; i<P; i++)
{
printf("%d:",i);
Node *q=hash[i]; //第一遍历指针
while (q!=NULL)
{
printf("%d->",q->data);
q=q->next;
}
printf("NULL\n");
}
}
查找函数
//查找函数
int search_hash(Node *hash[],int x)
{
int index=x%P;//定位要查找的值所在链表
Node *q=hash[index];//定义遍历指针遍历链表
while(q!=NULL&&q->data!=x)
{
q=q->next;
}
if (NULL==q)
{
printf("查找失败\n");
}else
{
printf("你所要查找的数据在表中\n");
}
}
调用函数
#include<stdlib.h>
#include"hash.h"
#include<stdio.h>
int main(int argc, const char *argv[])
{
int arr[N]={25,51,8,22,26,67,11,16,54,41};
Node *hash[P]; //哈希表
init_hash(hash);//初始化哈希表
//将序列元素存入哈希表
for (int i=0; i<N;i++)
{
insert_hash(hash,arr[i]);
}
//遍历函数
show_hash(hash);
//查找函数
search_hash(hash,120);
search_hash(hash,8);
return 0;
}
运行截图
第二题:(数据排序)
使用冒泡排序、选择排序、插入排序、快速排序完成下面案例
功能函数
冒泡排序
时间复杂度:(O(N^2))
void pop_soret(int *arr,int n)//冒泡排序
{
int i,j;
int temp;
int flag=0;
for (i=1; i<n; i++)
{
for (j=0; j<n-i; j++)
{
if (arr[j]>arr[j+1])
{
temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;
flag=1;
}
}
if(flag==0)
{
break;
}
}
}
选择排序
时间复杂度:(O(N^2))
void select_sort(int *arr,int n)//选择排序
{
int i,j;
int temp;
for(i=0;j<n;i++)
{
for(j=i;j<n;j++)
{
if (arr[i]>arr[j])
{
temp=arr[i];arr[i]=arr[j];arr[j]=temp;
}
}
}
}
插入排序
时间复杂度:(O(N^2))
void insert_sort(int *arr,int n)//插入排序
{
int i,j;
int temp;
for(i=1;i<n;i++)
{
temp=arr[i];
for(j=i;j>0 && temp<arr[j-1];j--){
arr[j]=arr[j-1];
}
arr[j]=temp;
}
}
快速排序
时间复杂度:(O(N*log2N) : N乘以以2为底的n的对数)
int part(int *arr,int low,int high)
{
int x=arr[low];
while (low<high)
{
while (arr[high]>=x && low<high)
{
high--;
}
arr[low]=arr[high];
while (arr[low]<=x && low<high)
{
low++;
}
arr[high]=arr[low];
}
arr[low]=x;
return low;
}
void quick(int *arr,int low,int high)//快速排序
{
int mid;
if (low<high)
{
mid=part(arr,low,high);
quick(arr,low,mid-1);
quick(arr,mid+1,high);
}
}
调用功能函数
int arr[6]={1,4,3,6,9,3};
printf("冒泡排序:\n");
pop_soret(arr,6); //冒泡排序
for (int i=0; i<6;i++)
{
printf("%d\t",arr[i]);
}printf("\n");
printf("选择排序:\n");//选择排序
select_sort(arr,6);
for (int i=0; i<6;i++)
{
printf("%d\t",arr[i]);
}printf("\n");
printf("插入排序\n");
insert_sort(arr,6); //插入排序
for (int i=0; i<6;i++)
{
printf("%d\t",arr[i]);
}printf("\n");
printf("快速排序:\n"); //快速排序
quick(arr,0,5);
for (int i=0; i<6;i++)
{
printf("%d\t",arr[i]);
}printf("\n");
return 0;
运行截图
全部代码
第一题
hash.h
#ifndef __HASH_H__
#define __HASH_H__
#define N 10
#define P 13
typedef int datatype;
typedef struct Node
{
datatype data;//数据域
struct Node *next;//指针域
}Node;
//初始化哈希表
void init_hash(Node *hash[]);
//将元素存入哈希表
int insert_hash(Node *hash[],int x);
//查看表函数
void show_hash(Node *hash[]);
//查找函数
int search_hash(Node *hash[],int x);
#endif
hash.c
#include<stdlib.h>
#include"hash.h"
#include<stdio.h>
//初始化哈希表
void init_hash(Node *hash[])
{
for (int i=0; i<P; i++)
{
hash[i]=NULL;
}
printf("初始化成功\n");
}
//将元素存入哈希表
int insert_hash(Node *hash[],int x)
{
int index = x%P; //定位要存储的链表
//将数据封装成节点
Node *q=(Node *)malloc(sizeof(Node));
if (NULL==q)
{
printf("空间申请失败\n");
return -1;
}
q->data=x;
q->next=NULL;
//使用头插法将节点放入链表hash[index]
q->next =hash[index];
hash[index]=q;
return 0;
}
//查看表函数
void show_hash(Node *hash[])
{
for (int i=0; i<P; i++)
{
printf("%d:",i);
Node *q=hash[i]; //第一遍历指针
while (q!=NULL)
{
printf("%d->",q->data);
q=q->next;
}
printf("NULL\n");
}
}
//查找函数
int search_hash(Node *hash[],int x)
{
int index=x%P;//定位要查找的值所在链表
Node *q=hash[index];//定义遍历指针遍历链表
while(q!=NULL&&q->data!=x)
{
q=q->next;
}
if (NULL==q)
{
printf("查找失败\n");
}else
{
printf("你所要查找的数据在表中\n");
}
}
main.c
#include<stdlib.h>
#include"hash.h"
#include<stdio.h>
int main(int argc, const char *argv[])
{
int arr[N]={25,51,8,22,26,67,11,16,54,41};
Node *hash[P]; //哈希表
init_hash(hash);//初始化哈希表
//将序列元素存入哈希表
for (int i=0; i<N;i++)
{
insert_hash(hash,arr[i]);
}
//遍历函数
show_hash(hash);
//查找函数
search_hash(hash,120);
search_hash(hash,8);
return 0;
}
第二题
sort.c
#include<stdio.h>
#include<stdlib.h>
void pop_soret(int *arr,int n)//冒泡排序
{
int i,j;
int temp;
int flag=0;
for (i=1; i<n; i++)
{
for (j=0; j<n-i; j++)
{
if (arr[j]>arr[j+1])
{
temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;
flag=1;
}
}
if(flag==0)
{
break;
}
}
}
void select_sort(int *arr,int n)//选择排序
{
int i,j;
int temp;
for(i=0;j<n;i++)
{
for(j=i;j<n;j++)
{
if (arr[i]>arr[j])
{
temp=arr[i];arr[i]=arr[j];arr[j]=temp;
}
}
}
}
void insert_sort(int *arr,int n)//插入排序
{
int i,j;
int temp;
for(i=1;i<n;i++)
{
temp=arr[i];
for(j=i;j>0 && temp<arr[j-1];j--){
arr[j]=arr[j-1];
}
arr[j]=temp;
}
}
int part(int *arr,int low,int high)
{
int x=arr[low];
while (low<high)
{
while (arr[high]>=x && low<high)
{
high--;
}
arr[low]=arr[high];
while (arr[low]<=x && low<high)
{
low++;
}
arr[high]=arr[low];
}
arr[low]=x;
return low;
}
void quick(int *arr,int low,int high)//快速排序
{
int mid;
if (low<high)
{
mid=part(arr,low,high);
quick(arr,low,mid-1);
quick(arr,mid+1,high);
}
}
int main(int argc, const char *argv[])
{
int arr[6]={1,4,3,6,9,3};
printf("冒泡排序:\n");
pop_soret(arr,6); //冒泡排序
for (int i=0; i<6;i++)
{
printf("%d\t",arr[i]);
}printf("\n");
printf("选择排序:\n");//选择排序
select_sort(arr,6);
for (int i=0; i<6;i++)
{
printf("%d\t",arr[i]);
}printf("\n");
printf("插入排序\n");
insert_sort(arr,6); //插入排序
for (int i=0; i<6;i++)
{
printf("%d\t",arr[i]);
}printf("\n");
printf("快速排序:\n"); //快速排序
quick(arr,0,5);
for (int i=0; i<6;i++)
{
printf("%d\t",arr[i]);
}printf("\n");
return 0;
}