1. 程式人生 > >用C語言實現一個鍵值對結構demo

用C語言實現一個鍵值對結構demo

主要思路是有兩個指標陣列,一個為key,一個為value,用索引一一對應實現一個key對應一個value。包括了增加和刪除,控制檯列印方法,現在仍有些指標指向記憶體類的bug需注意。這個程式嚴格來說還算不上雜湊。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAX 5 //還是需要設定佇列大小
//結構體包含鍵值對需要的內容
typedef struct {
	char * key[MAX] ;
	char * value[MAX] ;
	int len ;
}HASH;


int
init(HASH * hash){ int ret = 1 ; hash->len = MAX ; int i ; for(i = 0 ; i < hash->len ; i ++){ hash->key[i] = NULL ;//用NULL來初始化 hash->value[i] = NULL ; } for(i = 0 ; i < hash->len ; i ++){ if((hash->key[i] != '\0' ) || (hash->value[i] != '\0')){ ret = 0 ; } } return
ret ; } int isFull(HASH * hash){ int ret = 1 ; int i ; for(i = 0 ; i < hash->len ; i ++){ if(hash->key[i] == '\0'){//\0'同0,避免NULL在不同機器上邏輯地址的衝突 ret = 0 ; goto OUT ; } } OUT : return ret ; } int isEmpty(HASH * hash){ int ret = 1 ; int i ; for(i = 0 ; i < hash->len ; i ++){ if
(hash->key[i] != '\0'){ ret = 0 ; goto OUT ; } } OUT : return ret ; } int insert(HASH * hash , char * strKey , char * strValue){ int ret = 1 ; if(isFull(hash)){ ret = -1 ; goto OUT ; } int i ; for(i = 0 ; i < hash->len ; i ++){ if(hash->key[i] == '\0'){ hash->key[i] = strKey ; hash->value[i] = strValue ; break ; } } OUT : return ret ; } int delstr(HASH * hash , char * strKey){ int ret = 0 ; if(isEmpty(hash)){ ret = -1 ; goto OUT ; } int i ; for(i = 0 ; i < hash->len ; i ++){ if(hash->key[i] == strKey){ hash->key[i] = NULL ; hash->value[i] = NULL ; ret = 1 ; goto OUT ; } } ret = -2 ; OUT : return ret ; } void printHash(HASH * hash){ int i ; for(i = 0 ; i < hash->len ; i ++){ printf("key[%d]: %s ----- value[%d]: %s\n" , i , hash->key[i] , i , hash->value[i] ) ; } } int main(){ int ret ; OUT : return ret ; }