.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 若這棵二...