glib使用平衡二叉樹實現讀配置檔案

2021-07-31 15:45:23 字數 3417 閱讀 1364

.h

#ifndef alan_libconfig_h

#define alan_libconfig_h

#include

#include

#include

#define line_len 128 // 檔案行長度

#define sect_len 64 // 節點名稱長度

#define vint_len 64 // 整型數值長度

#define vchr_len 64 // 字元型值長度

typedef

struct _item_

config_item;

typedef

struct config;

typedef

struct _listnode // 鍊錶節點結構體

listnode;

config *config_form_open(const

char *fname);

void config_from_close(config *pini);

#endif//alan_libconfig_h

.c

#include "config.h"

char *key,

char *value,

char *section

)else

pconfig->length += 1;

return;

}config *config_from_open(const char *fname)

pconfig = (config *)malloc(sizeof(config));

pconfig->fname = (char *)malloc(strlen(fname)+1);

strcpy(pconfig->fname,fname);

pconfig->length = 0;

pconfig->header = pconfig->tailer = null;

while (!feof(fp))

else

if ('<' == *p)

else

key = (char *)malloc(strlen(s)+1);

for (p++; ' '==*p||'\t'==*p||'='==*p||':'==*p; p++);

for (s=p; '#'!=*p&&';'!=*p&&'\n'!=*p&&'\r'!=*p; p++);

for (p=s+strlen(s)-1; ' '==*p; *p=0,p--);

strcpy(value,s);

section = (char *)malloc(strlen(sect)+1);

strcpy(section,sect);}}

fclose(fp);

return (config*)pconfig;

}void config_from_free(config *pconfig)

while (p)

free(pconfig->fname);

free(pconfig);

return;

}

main

#include 

#include

#include

#include

#include "config_manager.h"

gboolean myprint(gpointer key, gpointer value, gpointer fmt)

return false;

}int main()

printf("檔案長度:%d\n",pconfig->length);

// printf("開啟檔案成功!\n");

//建立鍊錶2

//glist *list = (glist*)malloc(sizeof(glist));

glist *list = null;

//鍊錶2的節點

listnode *listnode = null;

//迭代器

config_item *it = pconfig->header;

//儲存上一鍊錶1節點中的段名

char tmpsectionname[100];

memset(tmpsectionname, 0, sizeof(tmpsectionname));

while(1)

memset(tmpsectionname, 0, sizeof(tmpsectionname));

strcpy(tmpsectionname, it->section);

//建立乙個鍊錶節點

listnode = (listnode*)malloc(sizeof(listnode));

//設定段名

memset(listnode->sectionname, 0, sizeof(listnode->sectionname));

strcpy(listnode->sectionname, it->section);

//建立一棵樹

listnode->ptree = g_tree_new((gcomparefunc)g_ascii_strcasecmp);

}// 讀取一段下面的內容

// printf("向二叉樹插入資料\n");

// printf("%s = %s\n", (char *)((gpointer)it->key), (char *)((gpointer)it->value));

g_tree_insert(listnode->ptree, (gpointer)it->key, (gpointer)it->value);

//printf("列印出樹中的資料:%s\n", (char*)g_tree_lookup(listnode->ptree, (gpointer)it->key));

if(pconfig->tailer == it)

it = it->next;

}//讀取鍊錶2內容

int i = 0;

for(i = 0; i < g_list_length(list); i++)

else

}// 釋放資源

for(i = 0; i < g_list_length(list); i++)

}if(null != list)

// 關閉檔案,釋放鍊錶1

config_from_free(pconfig);

//printf("釋放資源成功!\n");

return

0;}

功能主要在main函式實現 沒有設計函式 有人全部設計完了 可以在樓下貼出來 或者發我郵箱 [email protected] 多謝

python實現平衡二叉樹 平衡二叉樹python

stack depth is initialised to 0 def find in tree node,find condition,stack depth assert stack depth max stack depth deeper than max depth stack depth ...

平衡二叉樹例題 平衡二叉樹

acwing 72.平衡二叉樹 思路一 求每個節點的左右子樹深度,根據深度差判斷,直到葉子節點結束,效率不夠高,每個節點都要用兩次計算深度的遞迴函式 思路二 從葉子節點開始,計算深度差,一旦有深度差大於1的,就直接返回0,也不用管上面的深度是不是正確了,畢竟我們只需要true和false兩種狀態,省...

二叉樹 平衡二叉樹

1.題目 給定乙個二叉樹,判斷這棵二叉樹是否是高度平衡的二叉樹 平衡二叉樹 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1 2.題目分析 1 如果乙個節點的兩個子樹的深度之差超過1,則不是平衡二叉樹 2 如果乙個節點的兩個子樹的深度之差不超過1,則是平衡二叉樹 3.程式分析 1 若這棵二...