PHP中使用最为频繁的数据类型非字符串和数组莫属,使用哈希表实现的PHP数组。
1.数据结构:保存哈希表容器,保存数据的容器
2.哈希函数实现:需要尽可能的将不同的key映射到不同的槽(bucket)中,首先我们采用一种最为简单的哈希算法实现,将key字符串的所有字符加起来,然后以结果对哈希表的大小取模,这样索引就能落在数组索引的范围之内了
3.操作接口函数:初始化,查找,插入,删除,销毁
#include <stdio.h> #include <string.h> #include <stdlib.h> #define HASH_TABLE_INIT_SIZE 7 static int hash_str(char *key);//哈希函数 //数据结构容器 //保存数据的容器 typedef struct _Bucket{ char *key;//键 void *value;//值 struct _Bucket *next;//单链表 } Bucket; //哈希表容器 typedef struct _HashTable{ int size;//大小 int elem_num;//元素个数 Bucket** buckets;//二级指针,指向Bucket*的指针 } HashTable; int hash_init(HashTable *ht); // 初始化哈希表 int hash_lookup(HashTable *ht, char *key, void **result); // 根据key查找内容 int hash_insert(HashTable *ht, char *key, void *value); // 将内容插入到哈希表中 int hash_remove(HashTable *ht, char *key); // 删除key所指向的内容 int hash_destroy(HashTable *ht); int main(){ HashTable ht; hash_init(&ht);//初始化 hash_insert(&ht,"name","taoshihan");//插入 //练习二级指针 int a=100; int *p1=&a; int **p2=&p1; printf("%d,%d,%d ",a,*p1,**p2);//100,100,100 //字符串练习 char *str="tao"; printf("%c ",*str);//输出t while(*str!='