#include #include #include #define error -1
#define over_flow 0
#define ok 1
#define max_str_len 100
char hstr[max_str_len] = ;
char istr[max_str_len] = ;
typedef int status;
using namespace std;
typedef int atomtype;
typedef enum elemtag;
typedef struct glnode
prt;
};}*glist;
/*建立廣義表的思想:
廣義表結點分為列表結點和原子結點,當l為單個字元的時候,為原子結點。各個表中結點用逗號分隔
建立廣義表可以用遞迴思想實現,將乙個表中的表頭和表尾分別提取出來,分別建立表頭和表尾的廣義表,
建立過程中注意將遞迴得出的廣義表進行連線*/
void substring(char *sub, char *p,int start,int end)
*sub = '\0';
}void splitheadstr(char *&inputstr,char *&headstr)while(i < n &&(inputstr[i] != ',' || k != 0));
//該while迴圈的作用就是找出該錶第乙個表頭逗號出的位置,如果沒有逗號如: ((a,b))則會使i = n
//注意該錶已經脫去最外層的括號了
if(i < n)else
}status createglist(glist &glist, char *str)
else;
strcpy(tstr,headstr);
createglist(pointer->prt.hp,tstr); //遞迴建立表頭
if(str != null && strlen(str) != 0) //end if
}while(str != null && strlen(str) != 0); //直到表尾為空null則退出
pointer->prt.tp = null; //最後將表尾賦值為null
} //end else
} return ok;
} void outputatomnode(const glist mlist)while(pointer != null);
}int main()
status createglist(glist &glist, char *str)
else;
strcpy(tstr,headstr);
createglist(pointer->prt.hp,tstr); //遞迴建立表頭
tailnode = pointer;
if(str != null && strlen(str) != 0) //end if
}while(str != null && strlen(str) != 0); //直到表尾為空null則退出
pointer->prt.tp = null; //最後將表尾賦值為null
} //end else
} return ok;
}
廣義表操作 建立廣義表,判斷廣義表是否相等
建立廣義表 演算法思路 從字串行中分離出左部,右部,依次為左部和右部建立儲存 char s 61 設字串行長度不超過60 eg a,b c d,e,f g a i b int sever int a,int b i while k 0 s i i b return i eg a,b c d,e,f ...
廣義表的建立與列印
廣義表的建立與列印 本文取自 資料結構與演算法 c語言版 第三版 出版社是清華大學出版社。本博文作為學習資料整理。源 是vc 6.0上可執行程式,我挪到了vs2010中執行。在vs2010中新建c win32 控制台應用程式專案,建立結果截圖 1.廣義表的建立 廣義表的儲存結構示意圖 示例 c x,...
廣義表的建立,遍歷,求深度
include typedef char atomtype typedef enum elemtag atom 0,表示原子 list 1,表示子表 typedef struct glnode htp 表結點的指標域htp,包括 表頭指標域hp和表尾指標域tp atom htp atom htp 是...