ticoAg/ChineseCorpus-Kaggle-fanti huggingface dataset:
平公時期與公室關係最好的世卿是出於靖侯，且擁立悼公有功的欒氏。家主欒書去世後，繼承人欒黡“驕橫汰虐”，因此樹敵甚多，但仇敵們憚於其父餘威並未有所行動。欒黡去世後，災難終降臨於其子欒盈身上。不久，欒盈之母向其父士匄誣告，終令欒盈被殺，欒氏之族被殺殆盡，僅剩欒魴逃往宋國。欒氏被滅後，與欒盈交好的官員也受到波及，同為晉室支脈的羊舌氏成員一人被殺，二人被囚。欒氏被滅後，晉國大的卿族剩下還六家，即范氏、中行氏、智氏、韓氏、趙氏、魏氏六卿，剛好一家佔一個卿位，從此晉國君權不振，取而代之的是六卿專權時代。
平公在位後期，六卿勢大，公室不振，國勢也是日益衰落。平公在卿大夫荀盈去世後，想除去荀氏（智氏），以親信為卿，但在卿族強大的勢力重壓之下只得以荀盈之子荀躒繼任。從此平公便只知飲酒作樂，假裝不知公室的衰敗。在諸侯事務方面，楚靈王誘殺蔡靈侯後，興兵圍蔡。晉國不敢出兵救援，只派使臣向楚求情，但被楚靈王拒絕，徑直滅蔡並殺其太子。
平公二十六年（前532年）平公去世，其子昭公即位。此時，齊景公開始不把晉國放在眼中，有代其為盟主的企圖。昭公繼位的第二年，楚國發生政變，公子棄疾自立為楚平王。昭公想借機鞏固盟主地位，便在平丘召集諸侯會盟，但諸侯只是敷衍了事。會後，齊兩次單獨和徐、莒、邾、杞等國結盟。甚至宋國也在與其他諸侯會盟。
在昭公之子頃公在位期間，六卿借頃公之手消滅了祁氏和羊舌氏這兩家公室最後的支脈和擁護者，將其封地盡數瓜分，從此公室便再沒有可倚仗的勢力了。當公室已不復成為重要力量之時，六卿之間爭權奪利的斗爭便更加激烈。定公十五年（前497年），齊、衛於郹氏（今山東巨野附近）相會，攻晉的河內，第二次弭兵之盟至此完全破裂。從此出現了以齊為主的東方聯盟與晉之間的對峙，晉的盟主地位已只是個擺設。
也就是宋衛攻晉的當年，晉國六卿中的范氏和中行氏同其餘四家不和，兩國聯合魯國支持兩家意圖借機獲利。這次內亂最終被晉國平亂，范氏和中行氏被驅逐，其封地被另外四卿瓜分，至此晉卿還剩下知、韓、魏、趙四家。
在定公之子出公時期，卿族之間的鬥爭更加劇烈，晉的土地持續向北擴展著。知氏滅仇由（今山西盂縣東北）後，又於定公十六年（前459年）取中山國的窮魚之邱，勢力發展到河北定州一帶。趙襄子於出公十七年（前458年）成了趙氏首領後，誘殺其姐夫代王，盡取代地。四年後，四卿首領趙襄子、魏桓子、韓虎和知伯瑤將直屬公室的原范氏和中行氏剩餘領土全數瓜分，出公不滿，想借齊魯兩國軍隊逐四卿，反被四卿趕跑。
出公二十二年（前453年），知氏聯合韓、魏兩家圍趙氏的晉陽，但在關鍵時刻，韓、魏反過來同趙氏合力滅掉了最強大的知氏，並三分其地，至此晉國實際上已被三家瓜分。
此後名義上的晉國還繼續存在。哀公十八年（前434年），晉哀公卒，晉幽公即位。韓、趙、魏瓜分晉國剩余土地，只有絳與曲沃兩地留給晉幽公。從此韓、趙、魏稱為三晉。十八年後，幽公為“盜”所殺，其子烈公繼任。烈公十三年（前403年），周威烈王正式承認韓、趙、魏三家為諸侯。烈公後又傳孝公、靜公兩代。趙敬侯十一年（前376年），趙敬侯、韓哀侯、魏武侯瓜分晉國殘余領土，晉國宗室絕祀，建立近七百年的晉國徹底滅亡。趙成侯十六年（前359年），趙封晉靜公于端氏。趙肅侯元年（前349年），奪取端氏，徙靜公于屯留，此后再無晉國宗室的記載。
* 前11世紀，唐叔虞受封于唐。其子唐叔子燮更國名為晉，是為晉侯。
* 前858年，晉靖侯元年，晉國開始有確切紀年。
* 前746年，晉昭侯把曲沃封給其叔父（晉文侯的弟弟）曲沃桓叔成師，晉內亂開始。翼與曲沃爭奪晉國統治權。
* 前679年，曲沃武公統一晉國，周僖王接受賄賂之後封曲沃武公為晉國君主，列為諸侯。
* 前661年，晉國滅耿國、霍國和魏國。
* 前656年，驪姬之亂，世子申生被迫自殺，重耳逃走。
* 前655年，晉國使用假途伐虢之計，滅虞國和虢國。
* 前651年，晉獻公薨，驪姬之亂結束，晉惠公即位。
* 前646年，因為晉惠公拒絕向秦國賣糧食賑濟饑荒，秦穆公大怒，在韓之戰攻打并打敗晉國。
* 前636年，重耳（晉文公）即位。
* 前632年，晉楚城濮之戰，晉國打敗楚國。晉國稱霸中原。
* 前628年，晉文公薨，其子晉襄公即位。
* 前627年，晉秦殽之戰，晉國打敗秦國。
* 前621年，晉襄公薨，其子晉靈公尚幼，趙盾掌握政權。
* 前607年，晉靈公被殺，其叔晉成公即位。
* 前600年， 晉成公薨，其子晉景公即位。
* 前597年，邲之戰，晉國敗于楚國。
* 前578年，晉厲公聯合齊、魯、宋、衛等十二國伐秦，在麻隧大敗秦軍，虜秦國大將成差。
* 前575年，焉陵之戰，晉國擊敗鄭楚聯軍，虜楚國王子茷。
* 前557年，與楚國戰于湛阪（今平頂山），楚師受挫，攻楚至楚長城，又回師攻許國。同年攻齊至臨淄。
* 前546年，第二次弭兵之盟，晉國開始陷入六卿內斗。
* 前544年，吳國公子季札出使晉國，料言晉國政權要落到三家（趙魏韓）手中。
* 前490年， 范氏、中行氏逃亡齊國，晉國只剩下趙氏、魏氏、韓氏、智氏四卿。
* 前453年，韓、趙、魏三家滅智氏。
* 前434年，晉哀公死，晉幽公即位。韓、趙、魏瓜分晉國土地，只有絳與曲沃兩地留給晉幽公。從此韓、趙、魏稱為三晉。
* 前403年，周天子封韓、趙、魏三家為諸侯，三晉正式建國，戰國時代開始。
* 前376年，韓、趙、魏瓜分晉國殘余領土，晉國宗室絕祀，最終滅亡。
春秋諸侯分布圖晉國放大部分
晉國早期的地方行政為都、邑兩種。“都”是指有宗廟的城市，沒有宗廟的都稱為邑。隨晉國土地的不斷增長，到春秋初期又興起一種名為“縣”的行政單位。縣是通過滅亡其他小國而形成的，國君將其封給大夫作為世襲的封地。縣都是由新佔領的封地而設置，所以常位於國境邊緣，屬於軍政合一的單位。隨著滅國的增加，令得縣要比都和邑發展的得更快。而由於公室的衰微和世卿家族的興起，卿大夫們不斷兼併公室的領地，到悼公以後，連舊都絳也被置為縣了。晉國在春秋後期已經有四十九縣，並且都是“成縣”，也就是大縣。除此之外，還有為數不少的自大縣中分出的小縣。晉國的縣不同於楚國，其長官叫做縣大夫，也是可以世襲的，其權力幾乎和普通的邑大夫沒有區別。
在春秋末期，又出現了新的單位——郡。當時，郡的地位不如縣，原本是卿大夫控制新佔的封地而設置的。郡的地位雖然次於縣，但其轄域卻遠大於縣，主要為軍事單位。後來，隨著郡在政治和經濟方面的發展，郡便會分成數個縣，從此地位也凌駕於縣之上了，這也是戰國普通實施的郡縣制。
據《中國行政區劃史·總論、先秦卷》中的晉縣考的考證，晉縣最早為武公時所設的荀縣，再為獻公時的耿、魏兩縣，其餘各縣則為文公、靈公、平公和頃公時所置。這些縣主要分佈在黃河（古稱河水）與汾河流域，並遠離都城，處於邊地。
武公三十九年（前676年）
荀本為姬姓諸侯國，為晉武公所滅，其地賜給大夫原氏黯。
山西省新絳縣東北
獻公十六年（前661年）
原為姬姓諸侯國，為晉獻公所滅，其地賜給趙夙
山西省河津縣東南
原為姬姓諸侯國，為晉獻公所滅，其地賜給畢萬
山西省芮城縣北
文公三年（前635年）
本皆為周的畿內邑，因晉文公有功於王室而受賜，後皆置以為縣
河南省濟源市西南
河南省溫縣西南
河南省濟源市西北
河南省修武縣北
河南省溫縣東北
河南省沁陽市西北
河南省沁陽市西南
河南省滑縣東
文公九年（前628年）
晉文公於此年置有“先茅之縣”。第二年，晉將卻缺在箕大敗白狄，俘白狄子，晉襄公賜“先茅之縣”予胥臣
晉國最早有記載的縣
靈公七年（前614年）
本為鄭國城邑，後入晉，詹嘉為縣大夫。
河南省靈寶市西北
約靈公十四年（前607年）
河南省盧氏縣東北的陰地城
其長官不同於普通的縣大夫，而稱為命大夫
約景公七年（前594年）
山西省孝義市北
景公將其賜給士貞子
景公十二年（前589年）
申公巫臣於此年奔晉，景公封其為邢丘大夫。
景公誅趙同，原縣收為公室所有。
平公三年（前555年）
山西省長子縣
山西省屯留縣東南
約平公十二年（前546年）
山西省侯馬市東南
平公十五年（前543年）
此年置任縣，由鄭國人羽頡任縣大夫
河北省任縣東南
河南省中牟縣東，或說在河南省鶴壁市西
約平公二十五年（前533年）
平公十九年（前539年）
當年將州縣賜給鄭公孫段，他去世回收由溫縣管轄，后又分出賜給郤稱
原為宋縣，州縣在平公二十三年歸晉后，由韓起用其換取宋大夫樂大心的原縣。
頃公十三年時，公室最後力量祁氏和羊舌氏領地被掌權的世卿瓜分，祁氏之田被置為七縣，羊舌氏之田則分為三縣。
山西省介休市東北
山西省祁縣東南
山西省文水縣東北
山西省清徐縣
山西省榆次市西南
山西省壽陽縣東南
山西省陽曲縣東北
山西省沁縣南
山西省臨汾市西南
山西省洪洞縣東南
又作揚，或楊
定公十三年（前500年）
在西周時代，晉國是周朝北部重要封國，為抵禦戎狄的重要屏障。進入春秋以後，晉國不斷併吞周圍的諸侯小國與戎狄領地，實力大增。齊桓公去世，晉國進入爭霸行列，文公時在城濮之戰中擊敗楚國，躍升為諸侯霸主，開始長期主導華夏諸侯的政治。
晉國王室與赤狄通婚，曾被視為狄的同族。如晉伐鮮虞之役，《穀梁傳》批評晉為狄，認為這是夷狄攻打中國。
齊國是周朝的母舅之國，其始封君姜太公之女邑姜便是武王正妃，成王和唐叔虞的母親。在西周時，晉齊君主曾同擔任周康王大臣。雙方不僅是同僚，也經常通婚，獻公時的太子申生和穆姬之母就是齊女；文公流亡齊國期間，齊桓公對他禮遇有加，並將女兒嫁給他。齊桓公去世後，齊國出現君位之爭，其霸業衰落，從此進入到晉楚爭霸時代。此後的齊國雖然為晉的盟國，但又欲挑戰晉國的霸權，雙方最終在晉景公（齊頃公）時期發生鞌之戰，齊國戰敗。此戰之後，身處海濱的齊國雖然表面親晉，私下卻極力擴張其在東方的勢力。晉國自平公以後，內部卿大夫鬥爭激烈，齊國便開始以東方霸主自居，並多次與周邊小國盟會。
秦國在東周才立國，其始祖因助平王有功而封為諸侯，獲賜周室故地。到獻公時期，晉國向西用兵取驪戎之地後，兩國領地有所接觸，並開始互相交流。一方面兩國長期通婚，成語“秦晉之好”就是形容雙方的聯姻。惠公、文公則是由因秦穆公的幫助才得以即位；另一方面，隨著兩國領土的擴張，也面臨著衝突。文公去世後，一心求霸的秦穆公乘晉國國喪伐鄭不成，被晉國先後在殽之戰和令狐之戰中擊敗。兩國自此由原本的友邦變成敵對，秦國開始聯楚及勾結北狄來打擊晉國。在景公和厲公時代，晉國多次被秦、楚合擊。忍無可忍的厲公派呂相出使秦國，送出著名的呂相《絕秦書》為戰書，聯合齊、宋、衛、鄭、曹、邾和滕共八國之師伐秦，在麻隧之戰中大敗秦國。秦經此一役，幾世不振，元氣大傷，從此不再對形成晉國西部威脅。兩國對峙了八十多年後，到平公十一年（前547年），才在長期居於晉國的秦景公之弟后子鍼的調解下恢復關係。
晉、楚在西周時也曾為同僚。進入春秋後，楚國積極向北擴張，兩國因為利益而發生戰爭已是不可避免。但文公流亡國外時，曾在楚國受到楚成王的禮遇，文公沒有好的理由和楚國開戰。直到宋國親晉叛楚後，楚國發兵攻宋，晉國便以救宋的名義同楚國交戰，在城濮之戰中打敗楚國。晉國從此確立了霸權，原來親楚的鄭、魯等國都選擇了和晉國結盟。此後的百多年間，晉楚兩國多數爆發大戰，但兩國實力相差不大，雙方都沒有辦法完全壓過另一方。到春秋後期，晉國內部的鬥爭激烈，無暇對外爭霸，便與楚國簽訂第二次弭兵之盟，自此退出爭霸的舞臺。
由於晉楚長期對峙，雙國那些在政治鬥爭中失敗的大夫或家族往往會選擇逃往敵對國家，以保存自己，成語“楚材晉用”就是指楚國的人才為晉國所用的典故。比如晉國的伯宗被三郤所害後，其子伯州犁便逃往楚國為官；而仕晉的苗賁皇、申公巫臣原本都是楚臣，因為家族被滅或與權貴不睦才出走他國。
晉國與北方的戎狄毗鄰。戎狄並不是一個整體，而是當時對非華夏族群體的通稱。這些戎狄部落有些很早就已居於晉國周邊，有些則是受平王東遷的影響遷徙而至。
位於晉國和王室之間，活動於今山西絳縣、夏縣，中條山附近的條戎與奔戎是最早和晉國接觸的。晉穆侯七年（前805年），晉師伐條戎，這是晉國與戎狄最早的交戰記錄。晉穆侯十年（前802年），晉師伐千畝之戎，取勝。周宣王三十六年（前792年），晉穆侯隨王師伐條戎、奔戎並最終獲勝。
北戎則是活動於今山西和河北北方的山戎，其最大的一部又稱無終。晉穆侯在位期間曾大敗北戎。穆侯以後，齊桓公率諸侯將多次侵犯北燕、邢、衛的北戎擊潰，北戎至此衰落，並服於太行山一帶的赤狄。北戎在悼公時一度與晉國和談並達成近三十年的和平，直到無終聯合狄戎各部攻擊晉國為止。這次戰爭中，晉國改用步兵大敗聯軍。
對晉國最有威脅的要數白狄，這支狄族散佈於今陝西境內的黃河沿岸一帶，是曾摧毀西周的犬戎別部。春秋以後，白狄逐漸分為兩部：一支仍居原地；一支則越過黃河進入河北正定一帶。自晉獻公以來，晉國多次與堅守故地的白狄發生戰爭。晉成公以後，在晉秦兩國的夾擊下，這支白狄不得不一時服晉。
向東發展的白狄後來又分為鮮虞、肥和鼓三部。其中以鮮虞最強，其餘兩部都臣服於它。第二次弭兵之盟以後，中原戰事告於平息，控制晉國的政權的六卿便向東北擴張以增強各自實力。肥國首當其沖的被中行氏所滅，並在接下來的三年間，又多次圍攻鮮虞並迫降鼓國。鮮虞由此羽翼盡去，但其實力仍強，晉國多次被其攻擊，損兵折將不在少數。鮮虞甚至於定公六年（前506年）仿中原制度建立的中山國，受到範鞅與衛國聯軍的攻打。十年後，晉六卿內亂，中山國參加了齊、魯、衛三國攻晉的行動以救範氏、中行氏。進入戰國以後，中山成為除戰國七雄以外的北方強國之一，並持續對三晉形成威脅。
晉國和白狄雖曾多次發生戰爭，但雙方的關係也一度良好。驪姬之亂後，晉文公流亡白狄部落達十二年之久。厲公時期，白狄受到秦景公的欺騙，憤而之下選擇與晉國結盟。
赤狄是除白狄以外較有實力的一支，主要分佈於今山西東南的方山、盂縣、昔陽、武鄉一帶。它們在晉獻公時又稱“東山皋落氏”，一度嚴峻威脅著晉國。晉文公時先後在勤王成功後獲得天子所賜的南陽之地，再加上通過戰爭獲得的五鹿，對赤狄形成了包圍之勢。晉襄公以後，赤狄便分裂為潞氏、甲氏、留吁、鐸辰和嗇咎如五部，其中以潞氏最強。晉成公還將女兒伯姬嫁給潞氏君主嬰兒為夫人。由於嬰兒性格懦弱，大臣鄷舒擅權，他不僅弄傷嬰兒眼睛，還將伯姬殺害。晉景公大怒，命荀林父滅潞氏，嬰兒也被俘虜。第二年，晉國又連接滅掉了赤狄餘下四部。赤狄滅亡後，其殘餘一部分華夏化，另一部分則北奔，後來形成了漢朝時的高車族。
狐氏戎主要活動於今山西太原以西的呂梁山，是晉國始祖唐叔虞流落到戎人地區所出的後代，狐氏大戎與晉國的關係較好，晉文公的母親大戎狐姬便是狐氏戎女子，狐突和狐毛、狐偃父子都在晉國為官，是文公、襄公時期有影響力的家族。
位於今陝西臨潼一帶的驪戎跟晉國並不接壤，但晉國在獻公即位的第五年就滅驪戎，取驪姬而歸。驪戎由此成為晉國的飛地，直到十多數年後，獻公滅掉虞、虢、耿、魏等國才將晉國本土和驪戎之地相連。
陸渾之戎也是一度強大的戎部落，原居於今甘肅敦煌一帶的他們在西周時與周宣王所率的南國之師戰於千畝，周師損失甚大。晉惠公被秦國打敗後，使計誘其東遷於伊川（河南嵩縣），因伊川位於晉國境內黃河之南，故又稱“陰戎”。東遷的陸渾之戎從此成為了晉國附庸，其後又分裂為居於西部的“姜姓之戎”和居於東部的“允姓之戎”。晉國自平公以後，霸權日衰，陸渾之戎改與楚國親近，最終被晉荀吳所滅。
其他較常見的戎狄部落還有居于今山西平陸一帶的茅戎、居於河南伊水、洛水附近的伊洛之戎。這些戎狄除鮮虞所建的中山國以外，剩下都被晉國所滅，其部眾成為了晉國的人民。
宗法制度是周朝封建制的基礎。宗法規定，國君的繼承者必須是嫡長子，其餘的兒子都稱為別子。別子要另立宗族，並做為宗族的始祖。別子的宗族也是由嫡長子繼承，稱之為大宗，其餘的兒子要新立為小宗。大宗歷代都以最初分出的別子為祖，稱之為“百世不遷之宗”，而小宗則每過五世就要和大宗脫離，這即是“五世則遷之宗”。春秋以後，晉國經過曲沃代晉與獻公時的盡除公族和驪姬之亂後，破壞了傳統的宗法制度，使得宗法制在晉國無法完全貫徹。武公以後的國君只尊始祖唐叔虞為祖，武公為宗，而唐叔至武公之間的各代君主都不再接受祭祀。獻公以後，嫡長子繼承制度也有所松動。惠公、文公、成公、悼公都是以庶子的身份繼位，由於宗法約束力的下降，令禮的影響也有所減弱，取而代之的是法制。
晉國在文公以前的官職有司徒、司空、司馬、太師、太傅。司徒在西周時為執政，後為因晉厘侯名為司徒，為避諱便被廢置。司空為掌管軍法的官員，司空則主要管理軍營和後勤。文公以後，晉國實行的是軍政合一的制度，文公時設卿，卿又稱將軍，他既是文職，也是三軍的長官。六卿也稱六正或六將軍，其中中軍長官為眾卿之長，稱為正卿、中軍將或者元帥。
卿之下的官職又通稱大夫，大夫不僅是官職，同樣也是爵位。大夫也分上、中、下三種。並可以其司職而存在其他名稱。司空在西周本屬三公之一，卿制出現後，反倒成為了卿的手下，成為專司製造和刑法的大夫。晉國的司空多由世掌刑法的士氏擔任。
在教育方面，國君會委派一個大夫為太子的老師，稱之為傅，或太傅、太師、師保等。如晉平公為太子時，悼公以叔向為傅。成公得位後，將卿大夫的子弟列為公族，並設置公族大夫進行管理。在地方行政區劃方面，晉國實行邑、縣兩種形式，其長官通稱邑大夫、或縣大夫。
晉國執掌刑法的大夫又稱士、理或司寇。六卿中的士氏（後稱範氏）也是以職務為氏。晉國的司寇士氏是世掌刑律的家族，原本是為在王室任職，西周末期因內亂而逃至晉國為官。由於晉在春秋時為諸侯盟主，司寇也會常為諸侯判案，有時連王室也會請士氏幫忙。
管理宗族事務與典籍的大夫一般叫做祝、宗、卜、史等。祝主要為祈福和禳災。宗也稱宗人，主要是管理國君的卿大夫的家庭事務。史則為記事書言，也兼觀察天象和整理宗族資料。史官中還有一個分支，稱為卜，是專事占卜一事。而專門管理和整理收藏典籍的史官又叫做籍。
在古代，宴請賓客或進行祭祀活動中總少不了音樂，晉國司職音職的大夫稱之為“師”。而外交方面的人才，又通稱“行李”或“行人”，因為重要的會盟和朝聘活動都是由國君或卿大夫親自參加，故而行人主要是處理一般性質的外交活動。
根據周制，諸侯的親衛軍稱做“公乘”和“公行”。其主管呼為“七輿大夫”，春秋後期，由於國君勢衰，七輿大夫遂不見於史。
周朝的軍制是天子六軍，諸侯大國三軍，次等諸侯國二軍，小國則只有一軍。曲沃莊伯時期獲周釐王命為侯，擁有一軍。曲沃代晉之後的獻公時期，開始作二軍，並以太子申生將下軍，自己將上軍。文公在位之後，於被廬作上、中、下三軍，此為三軍制之始。之後又於清原新增新上軍和新下軍，使軍制擴充為五軍。晉襄公時，因一批老臣相繼去世，便又恢復為三軍制。晉厲公時又擴充為六軍，以提拔新人。悼公在位後，再度恢復為三軍，至此直接春秋末年，晉國一直保持三軍制不變。三軍的長官是由執政擔任，每一軍都有一將一佐。其中以中軍將為最高軍事長官，同時也是執政正卿。
在文公以前，軍隊的最高統帥是國君，每逢戰事，國君多會親自迎戰，為國君駕車的人立於戰車之左，稱之為“御戎”；國君本人居中，主要指揮軍隊；在國君右邊，還會有一名“戎右”執長兵器打擊敵方戰車。從城濮之戰後，國君一般不會親自出戰了，而是由正卿取而代之。
晉國的軍隊又分車兵和徙（步）兵兩種。車戰是春秋時期主要的作戰方式，晉國的車兵皆為甲士。甲士，也稱為士。他們都是國人組成，國人都居於國都周圍，是下層貴族的一種。士的職責就是“執干戈以衛社稷”，由於是子孫相繼的世襲軍人，所以他們不會直接參與農作。士在出征時需要自帶裝備和補給，並會用數名家丁做後勤。
車兵雖為晉的主要武裝力量，但由於甲車耗費甚大，而甲士人數有限，為了擴展軍力，不得不征集庶人入伍，稱之為卒伍。庶人本是自由耕種的農民，他們農時要自己耕作，閒時則應徵入伍，作為徒兵或做雜役。
由於位處北方，為了與戎狄對抗，晉於獻公時一度設置步兵，當初僅左、右二行。文公新加中行，形成中、右、左三行，並以荀林父為中行主將。但三行存在時間甚短，三年後，就將三行改制為上、下兩新軍。之後，晉便再也沒有設置過步兵了。
按周朝的封建制原則，晉國將土地劃分成若干份邑和縣分給公室和各級貴族。這些封地又會分為兩部分，一半是為公田，由擁有者派出人員經營；另一半則由庶民耕種，稱之為私田或份地。從春秋後期開始，由於社會的變革，大量的公田都無人耕種，傳統的制度便逐漸被改變。擁有土地的卿大夫們一反原本單一的畝制，紛紛自行規定畝制，將公田分給普通人民，再依私田的方式收稅，這也是春秋戰國之交的一大變革。
由於晉國的宗法制度影響不強，所以變得格外重視法制，晉位於夏虛，常引用夏書來判案。晉也是成文法產生的故鄉。
文公四年（前633年），文公作“執秩之法”，這是第一步變革。襄公去世後，大權落於趙氏之手，執政的趙盾將文公所作的法制修改為“趙宣子之法”，其目的是為保持私家的利益。景公時期，景公不滿趙氏專權，特命士會到王室學習周禮，回國後，依周禮制定了“範武子之法”，這部法律旨在加公室而抵制卿族勢力。不久，景公就依這部法律誅趙氏。悼公時期，為表示友好，令士渥濁修改範武子之法，以緩和公室和卿族的關係。這五部法律內容都十分龐雜，類似於今天的憲法。
春秋後期，晉的卿族十分強橫，在消滅欒氏後，六卿執政的局面已經形成。為了保持自身的權益，和打壓公室。執政正卿範宣子將刑法從總法用分出，單獨而成“範宣子刑書”，這部法律廢除了貴族特權。起初，這部刑法只是私藏於府，並沒有公開。待到四十年後的頃公十三年（前513年），六卿家族已經不能相容，趙鞅和荀寅才首次於大鼎上刻上這部刑書。
晉為姬姓國，是黃帝的後裔，有和姜姓通婚的傳統。晉的始封君唐叔虞的母親邑姜便是姜太公呂尚的女兒，後代國君也常與姜姓女子為妻。文侯的母親和夫人都出於姜姓；武公的妾為齊姜，獻公繼位後又娶她為妻並生穆姬和太子申生；文公流亡齊國後，齊桓公將女兒嫁給他；後期的平公也多次娶齊女。
因地處北方，其境和戎狄連接。從獻公即位後打破了“同姓不婚”的規則，先娶同姓賈國女子，後又娶唐叔虞流落在狄人部落的後代所出的狐氏女子，生文公；平公在位期間，其宮中就有四名姬姓女子。不僅於此，晉國還大量和狄人通婚，獻公所娶的大戎狐姬和驪姬都是姬姓戎女；之後的國君和卿大夫也常與戎人通婚。
周朝實行“以德配天”的“天命觀”思想，這也是晉國在西周時期的主要意識形態。唐叔虞受封不久，在晉國發現了一種“異畝同穎”的嘉禾，便將它獻給成王，成王又要他轉交給東方的周公，周公特作《嘉禾》以示上天對周朝的眷顧。周室東遷後，平王作《女侯之命》勉勵扶立有功的晉文侯，其中就提到了“奉天”、“敬祖”、“明德”和“惠民”的思想。在文侯之後的晉國分裂時期，由於內戰的頻繁，令普通人民對“天命觀”產生了動搖，他們不再相信變化無常的上天。在《詩經·唐風》中有一首《鴇羽》就提出了“悠悠葵，曷其有常”的疑問。於是原本的“敬天保民”思想向著“重民”轉變。重民思想在春秋後期進一步發展為“愛民”，大臣師曠就勸諫平公要懂得節制和減輕國民的負擔，這樣才能獲得人民的支持而在與世卿的鬥爭中佔得優勢。
晉國深信占卜，並有“卜”、“筮”、“占星”、“原夢”、“看相”和“音兆”等多種形式，其中又以卜和筮最為常見。《左傳》所載的各國卜筮活動約八十多次，而晉國就佔去一大半。獻公晚年欲立驪姬為夫人，就先後運用卜和筮兩種方法。但隨著時間的推移，卜筮在春秋後期已淪為一種形式，人的意志已蓋過“神”的意志。趙鞅在同範氏、齊、鄭聯軍作戰之前占卜，便出的結果是不吉，但他甘愿違卜作戰；另一次在攻打衛國時，形勢對己方不利，他就以占卜不吉為由班師回國。
晉國所使用的文字多見於甲骨、青銅器、陶器和貨幣等材料上，其中以春秋時的作品最為常見。從山西洪洞出土的春秋晚期甲骨中的文字筆畫纖細，與殷墟發現的商朝甲骨文的字體不同，而和春秋戰國時的青銅銘文接近。
二十世紀以來已經多次出土了晉國的盟誓載書，其中最為著名的便是二十世紀六十年代於晉都新絳所在的山西侯馬東周古城出土的《侯馬盟書》，這批盟書都是由毛筆用朱紅墨水寫就於玉石片上，從書中嫻熟的筆法可看出筆墨在當時已使用了很長時間，其文字的整體風格一致，字形和楚國文字相似。書中的文字是研究古代文字書法的珍貴材料。盟書中的文字的特點有：
# 一字多形。其中又分以精簡筆畫形成如“從”字，或因偏旁易位而形成的，如“助”，通常都有三種寫法。從盟書文字可知這種情況十分常見，如“敢”有九十餘種寫法，“嘉”的寫法更多達一百多種。像“亟”這種可以組字的部首本身也有十餘種寫法，當它用來做部首組成其他文字時，會顯示更加複雜；
# 通假字。漢時成書的《說文解字》雖然認為通假是造字六義之一，但其並非是造字的原則，而是在現成文字不足的情況下採取的權宜之計，如“是”與“氏”，“俞”和“偷”的通假都是如此。從現成的盟書中整理的文字中，本字有三百八十一個，存疑的四十六字，加再上一部分現已殘缺的文字，由此可知當時的日常文字數量已頗為豐富；
# 合字。除上述兩點外，盟書文字還保存有不少合字，像“子孫”寫為“”、“大夫”寫為“”等等。合字通常是不會造成誤解的專名。另外，盟書中還發現了作者特意而加的標點符號約四十七處。
而從《左傳》的記載還可看出當時的人們已經初步形成文字學，師服所說的“嘉耦曰妃、怨耦曰仇”和史趙的“亥有二首六身”都被認為是對文字的研究。
晉國的史書稱《乘》，乘是取載之意。世掌典籍的大夫家族稱為“籍氏”。而太史則主要記載言行，其中較為知名的人有董狐，時稱“良史”。當時史與籍有所不同，分司記載和收藏。《乘》在戰國初期還存在，諸子典籍也多有引用，但晉乘中的記載不見於孔子所刪採的《春秋》和其傳。秦始皇統一天下後，《晉乘》被視為“百國春秋”而被付之一炬。而漢武帝之後，又罷百家，尊儒術，《晉乘》從此散佚，後世的《漢書·藝文志》及《隋書·經籍志》均無任何記載。現存的《晉乘》四十二則是為後人偶獲，每則只記一事，並且不記年月，都為晉文公時期的事跡，內容多為採自《韓非子》等書。
由於史官司職不同，在春秋時發展出以記言為主的題材。《國語》就是本記言的史書，其中的《晉語》有九篇，佔全書的二分之一。
史官另一個重要職責是整理的記錄國君及貴族階級的世系，六卿中知氏的成員知果預言家族將滅，就在太史處登記，從知氏中分出，新立輔氏。後知氏被滅，輔氏得以幸免。另一方面，卿大夫家族也有自己的私人史官，主要記載自家家史，戰國成書的《世本》就多數引用了家史。
早在西周時期，晉國就對日月和行星的運動及二十八星宿有所了解。《詩經·國風·唐風·綢繆》中就出現了“三星在天”、“三星在隅”等記載，這當中的三星即是指參星。西周時，中國已經用歲星進行紀年，人們又將黃道附近一周天自西向東分為十二個等分的星域，稱為“十二次”，每一次以二十八宿中鄰近的幾顆為界域，歲星（即木星）每年約運行一次，十二年就運行一周，如果歲星在星紀就稱為“歲在星紀”。歲星一方法用來調整曆法並指導農事；另一方面也用作占卜。
繼“十二次”之後，當時人們還創造出“分野說”，將天上的十二次同地面聯繫起來。如實沈就是晉星。卜官還會依據星域中的異常來推測其對應國家的吉祥，這就是占星術。
晉位於夏虛，啟夏政，故而曆法不用周歷，而是使用夏朝的夏曆。夏曆正月為建寅之月，相比周曆，其在農物方面更加科學。當時雖還未形成“二十四節氣”，目前已知晉國人是用“分”、“至”、“啟”、“閉”八個節氣來對應春分、秋分、夏至、冬至、立春、立夏、立秋和立冬。
夏歷是一種陰陽歷，歲差是以置閏來調整的。在西周時，人們已經知道調整置閏的適當時期。邁入春秋後，又懂得了十九年七閏法。此外，晉國人還以月相來記日，用“朔”表示每月的初一，以“朏”表示初二或初三。
發源於商朝的干支紀日法在晉國已經非常普及，廣泛運用於社會各階層。在記時方面，則以“雞鳴”、“眛爽”、“旦”（日出）、“大昕”、“日中”、“日昃”、“夕”（日入）、“昏”、“宵”與“夜中”（夜半）共十時為表記。這種記時方法一直使用到南北朝時期。
規和矩是春秋時期手工業者常用的工具，《周髀算經》記載的勾股定理就是人們在運用規的過程發現的。目前並不曾見晉國運用勾股定理的直接記載，但根據史書所載的記錄來看，他們實際是懂得勾股定理的。
珠算的前身“籌”在春秋時的晉國也獲得廣泛運用。平公在位時期，其母晉悼夫人賜予參加修筑杞國城墻的工人酒飯，絳縣一位沒有兒子而只好親自去建城的老人也參加了酒席。有人懷疑他的年紀，老人以干支紀日做答：“臣生之歲，正月甲子朔，四百有四十五甲子矣，其季于今三之一也。”，官吏將答案回饋到朝廷，師曠、史趙和士文伯根據一年約等於個甲子心算出答案，師曠認為是“七十三年矣”，運用的方法類似：...約於等於445；士文伯得出“二萬六千六百六十天”，是以癸未距甲子四十日，採用再；史趙的答案“亥有二首六身，下二如身，是其日數也”比較特別，杜預認為這是“亥字二劃在上，併三六為身，如算之六”，史趙採用的實際就是籌算。
定公二年（前510年），晉國聯合諸侯大夫為王室修繕成周，晉國世襲司空的士氏成員士彌牟主持了這項有晉、魯、齊、宋、衛、鄭、曹、莒、薛、杞和小邾共十一個諸侯國參加的浩大工程。這項工程在三十天就告竣工，士彌牟在修建過程過不僅進行土方計算，而且還運用物理學中的求功原理，並連同工程所需的材料和工人口糧都一一列出，交給各個諸侯工程隊。從這項工程可看出當時的人們在建築工程運籌方面的成就，這也是先秦土木工程的一大傑作。
由於傳統天命觀和巫術的普及，以至晉國在醫學方面的成就並不出色，國君或大臣生病通常是請其他諸侯國的醫生幫助。晉景公病重期間，首先是請桑田巫進行驅癘祈福，在他無能為力的情況下才請秦國的醫緩來醫治，病入膏肓的景公終因錯失醫治良機不久後就去世了；後來晉平公生病，仍然是先採用占卜的方式，最後才又向秦國求醫。秦國派醫和前來醫治，直言是因縱欲所致。直到春秋末期，晉國才擺脫巫術對醫學的干涉。趙鞅生病後，下屬直接請扁鵲來治療，三天後就已康復。
晉國雖因巫術的盛行阻礙了醫學和發展，但在藥物的運用、常見疾病的預防與治療以及人體健康和環境之間的關係仍有了解。晉景公原本想遷都到郇瑕之地，大夫韓厥認為當地“土薄水淺”居住在那種地方容易患上風濕和關節炎之類的病癥。在他的建議下，景公最終改遷於“土厚水深、居之不疾”的新田。
由於春秋後期的氣候反常，傳染病在各諸侯國較為流行。疾病的傳播也時常影響到國家的軍事行動，各國為了人民的健康都以各種方式預防疾病的傳染和擴散，但都沒有好的治療方式，只能消極的預防。晉國曾因預防不力受到鄭國子產的指責。直到《山海經》成書後，人們才已初步掌握一些傳染病的治療方法。
晉國對藥物的知識也很豐富。驪姬之亂時，驪姬欲謀害太子申生，暗中在申生祭祀的食物中放入鴆和堇，這兩種劇毒之物導致“祭地，地墳，與犬，犬斃，與小臣，小臣亦斃”，令晉獻公對申生大為不滿。此外，晉國在藥量方面也有經驗。晉文公令醫衍毒殺衛成公時，醫衍因接受成公大臣衛寧俞的賄賂，便減小藥量，終令成公能保全性命。不僅於此，當時還懂得了用偏方治病。趙鞅家臣胥渠的病情需要食用騾肝才可以痊癒，趙鞅殺掉自己的白騾作藥方為他醫治，最終取得顯著療效。
在西周時，各地的諸侯每逢冬天都會去朝見天子。天子也會於此時在宗廟主持對祖先的祭祀，諸侯則會助祭。在祭祀過程所演唱的便是《詩經》中的雅頌。而國風則是由天子委派的史官在各地蒐集的民歌，再由樂師加工並配樂。《詩經·國風》中收有的晉國民歌都集結於魏風和唐風。其中《魏風》有七篇，分別是：《葛屨》、《汾沮洳》、《園有桃》、《陟岵》、《十畝之間》、《伐檀》、《碩鼠》；《唐風》為十二篇：《蟋蟀》、《山有樞》、《揚之水》、《椒卿》、《綢繆》、《杕杜》、《羔裘》、《鴇羽》、《無衣》、《有杕之杜》、《葛生》和《採苓》。以上詩歌的內容豐富，題材也極廣泛，在描寫手法上採用鋪陳、比、興等多段手段。這些詩歌中，有的描述軍隊生活，如《伐檀》和《鴇羽》；有的描寫普通農民的生活，如《十畝之間》和《採苓》；有些是反映新婚生活的愛情詩，如《綢繆》、《葛生》；而像《伐檀》與《碩鼠》則屬於政治諷刺。此外還有許多不見於現存《詩經》的詩歌，常常被《左傳》所引用。
《詩經》在春秋以後的晉國也佔有重要地位，不僅是日常必讀物；另一方面也是各國卿大夫在外活動委婉的表達意見的方式。《左傳》記載的類似活動中，《詩經》被引用達二百三十五次，其中又以晉國所佔比例最高。除被官方收集的以外，普通人民自編的多數詩歌早已湮沒於歷史長河中無法倖存。
古代的詩歌多為以樂器伴奏，稱之為弦歌；而普通人民在農事、狩獵、捕漁和伐木時即興演唱的詩歌，因沒有樂器伴奏，便叫做徒歌，又稱“謠”。晉國使用的樂器種類繁多，並按種類分為八音。分別是：
由於晉國在春秋是盟主，對外活動甚多，所以備有一種規模龐大的樂工團隊。同時因對外戰爭的勝利，戰敗方常以樂器、樂師為賄賂，其中以“鄭衛新聲”聞名的鄭國就多次賂賄以大量的樂器和樂師。原本按周朝禮制，天子才可以享受一列八人的舞蹈、諸侯為一列六人、大夫則為四人一列。而到春秋後期，不止諸侯開始僭越用天子之禮，甚至連普通的卿大夫也能光明正大的使用八倄了。而作為音樂人才交匯處的晉國，還出現了師曠這位馳名列國的音樂家。
《孟子·離婁上》中說：“師曠之聰，不以六律不能正五音”，這五音就是指“宮”、“商”、“角”、“徵”和“羽”，是由音的高低而制訂的。六律又分陽律和陰律，陽律原本是指用作確定音調的六根竹管，分為“黃鐘”、“太簇”、“姑洗”、“蕤賓”、“夷則”及“無射”，陰律則為“大呂”、“夾鐘”、“中呂”、“林鐘”、“南呂”與“應鍾”，又稱“六呂”，陽律和陰律可合稱為十二律。晉國當時已經懂得用三分損益法來確定六律，師曠還常將五行學說和五音六律相結合，用以勸導平公。
晉國本是建於夏虛，即夏朝的故地，為中華文明發祥地。當地在晉國立國前便存在了已發展很長時間的古唐國。而晉國又為善農的周人所建，周人的祖先是后稷，其善播百谷，為唐虞時代的農官之長，故而晉國在農業發面甚有經驗。由於西周時代的晉國地域狹小，發展不大。至晉文公時代，由於領地的不斷擴張，以及諸侯霸主的地位獲得了大量貢賦，令境內農業規模迅速發展和繁榮起來。
據古籍《世本》的記載，古人最早使用的農業工具是神農及堯舜時代所發明的耒（lěi）和耜（sì）。所謂耒，是木制的尖刃，形似一端被削尖的木棒；耜則為木、骨等材料打磨而成的平刃農具，狀如大鏟。由於技術的革新，到商周之際，原為其材料為木、骨的耜頭也便改以青銅所製造，這即是現代所稱的鏟，當時則叫做“錢”。與此同時，耒則演變成為犁。到春秋後，當時的主要農具還有鋤，這些當時社會所常見的器物也反映於當時人們的命名風格上，如晉大夫伯宗之子伯州犁；甚至莒國還有國君為莒犁比公，其本名又做買朱鉏。除此之外，晉國所見的農具尚有钁和夯錘。
由於犁的出現，農業技術也就逐漸從原始的刀耕火種向著深耕細作發展。最初，人們還只是用人力來挽犁，在春秋中後期晉國早出現了牛耕。六卿中的範氏和中行氏在政治較量中失勢後，其原用作祭祀的牲牛也被迫成為從事農耕的役畜。
西周時代晉國的手工業發展如何目前還所知甚少。進入春秋時期後，社會有所變革。晉文公即位後實行“工商食官”的政策，手工業由官營為主，其主管為大司空。政府直接控制手工業的生產，而工人則是以世襲的方式來傳承。官營的手工業以生產兵器、戰車、鎧甲等戰爭用具和社會上層必需的禮器、食品、服飾和錢幣為主。而建築領域則以庶人為主體，再輔之專業的工匠。
除官營的外，晉國還存在著由勢大貴族私營的手工業，通用於其家族來建宗廟和鑄祭器。貴族掌握的手工業雖然在性質上與國營的手工業相差無幾，但不可以稱為“官營”。此外則還有民間以家庭為單位的手工業生產，主要是種桑採麻與養蠶織帛。到春秋後期，社會繼續變革，伴隨貴族私營手工業興起的則是官營手工業的衰落。於是晉悼公實行“公無禁利”的政策，從此庶人也可以棄家從工，到戰國初期便有了以鹽鐵致富的工場主。
戰國的《考工記》所載的手工業有三十餘個工種，自文獻與出土文物來看，晉國的手工業是分為金屬冶煉、紡織染色、製革、制陶、車船、制鹽、營業和玉石漆器加工八種。
在春秋早期之前，實行的是“工商食官”，商人和工人都屬於政府管理，并且是一種世襲的制度，居住於市井之中，不得隨意改變職業和遷徙。春秋以後，已經開始出現私營商業，那些成功的商人的政治地位也較高，能像外交人員一樣到處活動。商業的發展對舊有制度的衝突也是巨大的。其中最為突出的便為土地成為了商品。晉悼公時期的魏絳勸悼公與北戎談和的建議中就一條是“戎狄薦居，貴貨易土，土可賈焉。”。到三家分晉之際，則又出現了私人間的封地交易。
晉國使用的貨幣主要為海貝和布。貝的單位為“朋”，一般要十枚貝為一朋。由於貝產於海濱，處於內地原晉國並不易獲得，隨著經濟的發展，貨幣的流通量也增多，海貝已經供應不足了。於是改用骨或玉仿製成貝的形狀。另一種布幣實際就是種名叫鏟的農具，西周時又稱之為錢或鎛，布即是鎛字的假借。
在二十世紀九十年代初，於翼城以和與曲沃之東交界處的天馬—曲村遺址中部偏北發現了晉侯墓地群。目前共發現九組，共十九座墓葬，其中十一座完好，另八座則被盜掘。該墓葬群可分三排，分別是北排四組，中排二組和南排三組。每組的東方都有一座車馬坑。墓地的年代上起西周早期晚段，下至春秋初期。
晉侯墓地的分佈特點是墓葬方向大致相同，基本為東北－西南向，其排列如下表，每組的順序是自東往西：
M9-M13
M33-M32
M93-M102
M114-M113
M91-M92
M8-M31
M64-M62-M63
以上九組墓地除M114-M113組和M9-M13是侯墓居右（西），夫人人墓居左（東）外，其餘皆為侯左，夫人右。
考古學家張長壽認為晉侯墓地的順序為：
M62-M62-M64
從中發現的出土銅器銘文中共發現有六位晉侯的名字，他們為晉侯僰馬、晉侯喜父、晉侯對、晉侯蘇、晉侯和晉侯邦父。根據銘文來和編號及相關資料相綜合，得到墓主排列為：
晉侯家父或晉侯邦父之子？
《史記·晉世家》的記載
山西天馬—曲村晉侯墓地青銅器銘文記載
墓葬推定年代
西周早期偏晚
西周晚期中葉
獻侯籍 （蘇）
晉侯穌、叔釗父
晉侯邦父、休、伯盍父、伯降父
西周晚期末葉
前1042年—？
？—前859年
前858年—前841年
晉-{釐}-侯
-{釐}-侯、僖侯
前840年—前823年
前811年—前785年
前784年—前781年
前780年—前746年
前745年—前740年
前739年—前724年
前723年—前718年
前717年—前709年
前708年—前705年
前704年—前679年
前744年—前731年
前730年—前716年
前715年—前677年
前676年—前651年
未及即位就被殺
前650年—前637年
未及改元就被殺
前637年—前637年
前636年—前628年
前627年—前621年
前620年—前607年
前606年—前600年
左傳作獳史記作據
前599年—前581年
左傳作州蒲史記作壽曼
前580年—前574年
前573年—前558年
前557年—前532年
前531年—前526年
前525年—前512年
前511年—前475年
前474年—前452年
哀公、懿公、敬公
前451年—前434年
前433年—前416年
前415年—前389年
前388年—前369年
靜公、、靖公、悼公
前356年—前349年
晉國自晉文公之后，逐漸形成了六卿，即范氏、中行氏、智氏、韓氏、魏氏和趙氏六家。春秋后期，晉國之政由六卿把持，晉君反要朝于六卿。
前633年—前632年
前632年—前627年
前627年—前622年
前622年—前621年
前621年—前601年
前601年—前597年
前597年—前594年
前594年—前592年
士蒍之孫，成伯缺之子
前592年—前587年
前587年—前573年
欒枝之孫，欒盾之子。晉國公族之一
前573年—前566年
韓簡之孫，出自曲沃桓叔之子韓萬
前566年—前560年
荀首之子，荀林父之侄
前560年—前554年
前554年—前548年
前548年—前541年
前541年—前514年
前514年—前509年
魏犨曾孫，魏絳之子
前509年—前501年
前501年—前493年
荀罃曾孫。荀林父之弟荀首之后。
前493年—前475年
前475年—前453年
# 左丘明《左傳》
# 《國語》
# 《古本竹書紀年》
# 《世本》
# 白壽彝主編《中國通史》
# 顧德融、朱順龍 著《中國斷代史系列：春秋史》 上海人民出版社 ISBN 7-208-03612-8
# 李孟存 常金倉 著《晉國史綱要》 山西人民出版社 ISBN 7-203-00844-4
# 任偉 著《西周封國考疑》 社會科學文獻出版社 ISBN 7-80190-238-6
# 張蔭麟 撰 《中國史綱》 上海古籍出版社 ISBN 7-5325-2674-7
# 《中國歷史大辭典》附錄二 中國歷史紀年表
# 錢穆《中國史學名著》
# 趙學清 《戰國東方五國文字構型系統研究》 上海教育出版社 ISBN 7-5320-9758-7
# 周振鶴主編 周振鶴、李曉杰著 《中國行政區劃通史·總論、先秦卷》 復旦大學出版社 ISBN 978-7-309-05593-1
這是一個無向循環圖，可以用下面幾個表來描述：{a,b}, {a,c}, {b,c}。
在圖論和計算機科學中，鄰接表（英語：adjacency list）是表示了圖中與每一個頂點相鄰的邊集的集合，這里的集合指的是無序集。
如果是無向圖，那么每條邊由兩個結點組成，分別代表邊的兩個端點；如果是有向圖，那么每條邊是一個結點對，分別代表邊的始點和終點。
上圖的鄰接表表示
在計算機科學中，鄰接表描述一種緊密相關的數據結構，用于表征圖。在鄰接表的表示中，對于圖中的每個頂點，將保存所有其它與之相連的頂點（即“鄰接表”）。例如，由吉多·范羅蘇姆提出的，使用哈希表將每個頂點和該頂點的鄰接點數組關連起來，就可以看作是上述表示方法的一種實現。又如，在Cormenetal中，頂點數組的每個元素都指向一個鄰接點單鏈表。
鄰接表結構的困難之一是無法明確在什么地方保存相關邊的長度或花銷。為了解決這個問題，一些算法，如
Goodrich and Tamassia所提出的面向對象鄰接表，有時也稱「關聯度」，它為每個頂點保存一個對象表，每個對象表示指向頂點的那條邊的關聯度。為了完善這個結構，每條邊必須指向兩個組成其端點的頂點。這個額外的邊對象使得它比直接列出所有邊的鄰接表消耗更多的內存，但它不失為一種保存邊相關信息的好方法。
/* 圖的鄰接表存儲表示 */
#define MAX_VERTEX_NUM 20
typedef enum{DG,DN,UDG,UDN}GraphKind; /* {有向圖,有向網,無向圖,無向網} */
typedef struct ArcNode
int adjvex; /* 該弧所指向的頂點的位置 */
struct ArcNode *nextarc; /* 指向下一條弧的指針 */
InfoType *info; /* 網的權值指針） */
}ArcNode; /* 表結點 */
VertexType data; /* 頂點信息 */
ArcNode *firstarc; /* 第一個表結點的地址,指向第一條依附該頂點的弧的指針 */
}VNode,AdjListMAX_VERTEX_NUM; /* 頭結點 */
AdjList vertices;
int vexnum,arcnum; /* 圖的當前頂點數和弧數 */
GraphKind kind; /* 圖的種類標志 */
}ALGraph;
/* 圖的鄰接表存儲的基本操作(15個)*/
#include"bo2-8.c" /* 不帶頭結點的單鏈表基本操作 */
#include"func2-1.c" /* 不帶頭結點的單鏈表擴展操作 */
int LocateVex(ALGraph G,VertexType u)
{ /* 初始條件：圖G存在，u和G中頂點有相同特征 */
/* 操作結果：若G中存在頂點u，則返回該頂點在圖中位置；否則返回-1 */
for(i=0;i=2) /* 無向圖或網，產生第2個表結點，并插在第j個元素(入弧)的表頭 */
e.adjvex=i; /* e.info不變，不必再賦值 */
ListInsert(&(*G).verticesj.firstarc,1,e); /* 插在第j個元素的表頭，在bo2-8.c中 */
void CreateGraphF(ALGraph *G)
{ /* 采用鄰接表 存儲結構，由文件構造沒有相關信息圖或網G(用一個函數構造4種圖) */
int i,j,k,w; /* w是權值 */
VertexType va,vb; /* 連接邊或弧的2頂點 */
ElemType e;
char filename13;
FILE *graphlist;
printf("請輸入數據文件名(f7-1.txt或f7-2.txt)：");
scanf("%s",filename);
printf("請輸入圖的類型(有向圖:0,有向網:1,無向圖:2,無向網:3): ");
scanf("%d",&(*G).kind);
graphlist=fopen(filename,"r"); /* 以讀的方式打開數據文件，并以graphlist表示 */
fscanf(graphlist,"%d",&(*G).vexnum);
fscanf(graphlist,"%d",&(*G).arcnum);
fclose(graphlist); /* 關閉數據文件 */
void DestroyGraph(ALGraph *G)
{ /* 初始條件：圖G存在。操作結果：銷毀圖G */
for(i=0;ii) /* 頂點序號>i(保證動態生成的權值空間只釋放1次) */
free(e.info);
else /* 圖 */
DestroyList(&(*G).verticesi.firstarc); /* 銷毀弧或邊鏈表，在bo2-8.c中 */
(*G).vexnum=0; /* 頂點數為0 */
(*G).arcnum=0; /* 邊或弧數為0 */
VertexType* GetVex(ALGraph G,int v)
{ /* 初始條件：圖G存在，v是G中某個頂點的序號。操作結果：返回v的值 */
if(v>=G.vexnum
v-1) /* v是G的頂點 */
strcpy((*G).verticesi.data,value);
int FirstAdjVex(ALGraph G,VertexType v)
{ /* 初始條件：圖G存在，v是G中某個頂點 */
/* 操作結果：返回v的第一個鄰接頂點的序號。若頂點在G中沒有鄰接頂點，則返回-1 */
LinkList p;
int v1;
v1=LocateVex(G,v); /* v1為頂點v在圖G中的序號 */
p=G.verticesv1.firstarc;
return p->data.adjvex;
Status equalvex(ElemType a,ElemType b)
{ /* DeleteArc、DeleteVex和NextAdjVex要調用的函數 */
if(a.adjvex==b.adjvex)
int NextAdjVex(ALGraph G,VertexType v,VertexType w)
{ /* 初始條件：圖G存在，v是G中某個頂點，w是v的鄰接頂點 */
/* 操作結果：返回v的(相對于w的)下一個鄰接頂點的序號。若w是v的最后一個鄰接點，則返回-1 */
LinkList p,p1; /* p1在Point中用作輔助指針，Point在func2-1.c中 */
e.adjvex=LocateVex(G,w); /* e.adjvex為頂點w在圖G中的序號 */
p=Point(G.verticesv1.firstarc,e,equalvex,&p1); /* p指向頂點v的鏈表中鄰接頂點為w的結點 */
p->next) /* 沒找到w或w是最后一個鄰接點 */
else /* p->data.adjvex==w */
return p->next->data.adjvex; /* 返回v的(相對于w的)下一個鄰接頂點的序號 */
void InsertVex(ALGraph *G,VertexType v)
{ /* 初始條件：圖G存在，v和圖中頂點有相同特征 */
/* 操作結果：在圖G中增添新頂點v(不增添與頂點相關的弧，留待InsertArc去做) */
strcpy((*G).vertices(*G).vexnum.data,v); /* 構造新頂點向量 */
(*G).vertices(*G).vexnum.firstarc=NULL;
(*G).vexnum++; /* 圖G的頂點數加1 */
Status DeleteVex(ALGraph *G,VertexType v)
{ /* 初始條件：圖G存在，v是G中某個頂點。操作結果：刪除G中頂點v及其相關的弧 */
int i,j,k;
LinkList p,p1;
j=LocateVex(*G,v); /* j是頂點v的序號 */
if(jnext=p->next; /* 從鏈表中刪除p所指結點 */
else /* p指向首元結點 */
(*G).verticesi.firstarc=p->next; /* 頭指針指向下一結點 */
if((*G).kinddata.info); /* 釋放動態生成的權值空間 */
free(p); /* 釋放v為入度的結點 */
for(k=j+1;kj的結點，其序號-1 */
e.adjvex=k;
p=Point((*G).verticesi.firstarc,e,equalvex,&p1); /* Point在func2-1.c中 */
p->data.adjvex--; /* 序號-1(因為前移) */
Status InsertArc(ALGraph *G,VertexType v,VertexType w)
{ /* 初始條件：圖G存在，v和w是G中兩個頂點 */
/* 操作結果：在G中增添弧，若G是無向的，則還增添對稱弧 */
i=LocateVex(*G,v); /* 弧尾或邊的序號 */
j=LocateVex(*G,w); /* 弧頭或邊的序號 */
if(i=2) /* 無向，生成另一個表結點 */
e.adjvex=i; /* e.info不變 */
ListInsert(&(*G).verticesj.firstarc,1,e); /* 將e插在弧頭的表頭 */
Status DeleteArc(ALGraph *G,VertexType v,VertexType w)
/* 操作結果：在G中刪除弧，若G是無向的，則還刪除對稱弧 */
Status k;
i=LocateVex(*G,v); /* i是頂點v(弧尾)的序號 */
j=LocateVex(*G,w); /* j是頂點w(弧頭)的序號 */
if(i=2) /* 無向，刪除對稱弧 */
e.adjvex=i;
DeleteElem(&(*G).verticesj.firstarc,&e,equalvex);
else /* 沒找到待刪除的弧 */
Boolean visitedMAX_VERTEX_NUM; /* 訪問標志數組(全局量) */
void(*VisitFunc)(char* v); /* 函數變量(全局量) */
void DFS(ALGraph G,int v)
{ /* 從第v個頂點出發遞歸地深度優先遍歷圖G。算法7.5 */
int w;
visitedv=TRUE; /* 設置訪問標志為TRUE(已訪問) */
VisitFunc(G.verticesv.data); /* 訪問第v個頂點 */
for(w=FirstAdjVex(G,G.verticesv.data);w>=0;w=NextAdjVex(G,G.verticesv.data,G.verticesw.data))
if(!visitedw)
DFS(G,w); /* 對v的尚未訪問的鄰接點w遞歸調用DFS */
void DFSTraverse(ALGraph G,void(*Visit)(char*))
{ /* 對圖G作深度優先遍歷。算法7.4 */
int v;
VisitFunc=Visit; /* 使用全局變量VisitFunc，使DFS不必設函數指針參數 */
for(v=0;v=0;w=NextAdjVex(G,G.verticesu.data,G.verticesw.data))
if(!visitedw) /* w為u的尚未訪問的鄰接頂點 */
visitedw=TRUE;
Visit(G.verticesw.data);
EnQueue(&Q,w); /* w入隊 */
void DFS1(ALGraph G,int v,void(*Visit)(char*))
{ /* 從第v個頂點出發遞歸地深度優先遍歷圖G。僅適用于鄰接表存儲結構 */
ArcNode *p; /* p指向表結點 */
Visit(G.verticesv.data); /* 訪問該頂點 */
for(p=G.verticesv.firstarc;p;p=p->next) /* p依次指向v的鄰接頂點 */
if(!visitedp->data.adjvex)
DFS1(G,p->data.adjvex,Visit); /* 對v的尚未訪問的鄰接點遞歸調用DFS1 */
void DFSTraverse1(ALGraph G,void(*Visit)(char*))
{ /* 對圖G作深度優先遍歷。DFS1設函數指針參數 */
for(v=0;vnext) /* p依次指向u的鄰接頂點 */
if(!visitedp->data.adjvex) /* u的鄰接頂點尚未被訪問 */
visitedp->data.adjvex=TRUE; /* 該鄰接頂點設為已被訪問 */
Visit(G.verticesp->data.adjvex.data); /* 訪問該鄰接頂點 */
EnQueue(&Q,p->data.adjvex); /* 入隊該鄰接頂點序號 */
void Display(ALGraph G)
{ /* 輸出圖的鄰接矩陣G */
switch(G.kind)
case DG: printf("有向圖\n");
case DN: printf("有向網\n");
case UDG:printf("無向圖\n");
case UDN:printf("無向網\n");
printf("%d個頂點：\n",G.vexnum);
for(i=0;idata.adjvex) /* 有向或無向兩次中的一次 */
printf("%s→%s ",G.verticesi.data,G.verticesp->data.adjvex.data);
if(G.kind%2) /* 網 */
printf(":%d ",*(p->data.info));
p=p->nextarc;
可用于替代鄰接表的主要有鄰接矩陣。用稀疏鄰接矩陣表示鄰接表時，將占用更少的空間。這是因為它能避免為''不存在''的邊分配任何空間。在一臺32位計算機上，如果使用原始的數組結構實現鄰接表，那么對于一個無向圖來說，它大約需要占用字節的存儲空間，其中表示邊的個數。每條邊都將會在兩個鄰接表中重復出現，并分別占用4字節空間。
相反地，由于鄰接矩陣中的每個元素僅占用一位（bit），故可以以非常緊密的方式來存儲，僅占用個字節，其中代表頂點個數。除了節省空間外，這種緊密存儲也發揚了locality of reference。
注意到一個圖至多能有條邊（允許循環）。令表示圖的''致密度''，則由，可知鄰接表將占用更多的空間，準確地說，僅當'以說只有當圖比較稀疏的時候，才有可能以較少的空間來存儲鄰接表。不過，以上分析只有在僅考慮邊的連接性，而不考慮關于邊的任何數值信息時才有效。
除了空間方面的考慮外，不同的數據結構也使得不同的操作變得更容易。在一個鄰接表中，給定一個頂點，可以很容易地找出它的所有鄰邊，因為只需要讀取它的鄰接表就可以了。在一個鄰接矩陣中，相同的操作則需要掃描一行，花費大約（大O標記）時間。而如果你想知道給定的兩個頂點間是否存在有邊，在鄰接矩陣里可以立刻查到，在鄰接表中則需要花費以邊的最小關聯度成比例的時間。
渭河，古稱渭水，是黃河的第一大支流。發源于中國甘肅省渭源縣的鳥鼠山東側和西秦嶺北側，主要流經今甘肅省的天水、陜西省關中平原的寶雞、咸陽、西安、渭南等地，至渭南市潼關縣匯入黃河。渭河全長818公里，流域包括甘肅、寧夏、陜西三省區，總面積134766平方公里，其中陜西占50%，甘肅占44%。渭河南有東西走向的秦嶺橫-{zh-hans:亙; zh-hant:亙;}-，北有六盤山屏障。渭河流域可分為東西二部：西為黃土丘陵溝壑區，東為關中平原（又叫渭河平原）區。
渭河上游以及北岸涇河、洛河等支流，流經黃土高原，攜帶大量泥沙。
在甘肅省境內，渭河主要支流有秦祁河、大咸河、散渡河、義隴河、榜沙河、散渡河、葫蘆河、藉河、牛頭河等。
陜西省境內渭河流域右岸南山支流較多，從西到東有清姜河、清水河、石頭河、西湯峪、黑河、澇峪河、新河、灃河、皂河、灞河、零河、湭河、赤水河、遇仙河、羅紋河、羅敷河等，大都水清、源短、流急，較長的黑河125公里，灞河104公里，其余皆不足百公里。左岸為黃土階地原區，支流稀少，從西向東有通關河、小水河、金陵河、千河、漆水河、涇河、石川河、洛河等，大多水量相對較小而含沙量很大，流長在百公里以上。
在西安咸陽地區的渭河河段及其在這一地區的八條支流構成了自古以來著名的八水繞長安，說明關中地區在古時候的優越的自然條件。
地圖描繪了八水繞長安的八條河流的分布
中國古代歷代為了灌溉和水運的目的，修築了渠道。公元前246年，秦朝的鄭國渠引涇河到洛河、漕渠，漢武帝時的白公渠引涇河到渭河、涇惠渠、渭惠渠、洛惠渠等水道，這些渠道主要集中在渭河的中下游。
* 〈詩經·國風·秦風·渭陽〉
我送舅氏，曰至渭陽，何以贈之，路車乘黃；
我送舅氏，悠悠我思，何以贈之，瓊瑰玉佩。
夸父不量力，欲追日影，逐之于隅谷之際。渴欲得飲，赴飲河渭。河渭不足，將走北飲大澤。未至，道渴而死。棄其杖，尸膏肉所浸，生鄧林。鄧林彌廣數千里焉。
又西二百二十里，曰鳥鼠同穴之山，其上多白虎、白玉。渭水出焉，而東流注于河。
夸父與日逐走，入日；渴，欲得飲，飲于河渭；河渭不足，北飲大澤。未至，道渴而死。棄其杖，化為鄧林。
公劉…務耕種，行地宜，自漆、沮度渭，取材用。
* 〈史記·齊太公世家〉　司馬遷
於是周西伯獵，果遇太公渭之陽，與語，大說，曰:「自吾先君太公曰『當有聖人適周,周以興』。子真是邪?吾太公望子久矣。」