国产欧美日韩在线观看一区二区,欧美乱码精品一区二区三区,国产粉嫩高中无套进入,中文在线天堂网www

報告

數據結構實驗報告

時間:2024-11-22 14:29:08 報告 我要投稿

數據結構實驗報告

  在經濟發展迅速的今天,報告的使用成為日常生活的常態,要注意報告在寫作時具有一定的格式。那么,報告到底怎么寫才合適呢?下面是小編整理的數據結構實驗報告,希望能夠幫助到大家。

數據結構實驗報告

數據結構實驗報告1

  一、設計的背景和目的

  隨著社會信息化和網絡技術的發展,數據結構成為了計算機專業學生必修的課程之一。而數據結構的課程設計是檢驗學生理解數據結構的重要手段之一。本次實驗旨在讓學生通過實踐,掌握線性表、棧、隊列、樹等數據結構的基本操作和應用。

  二、設計的內容

  本次實驗分為四部分,分別為線性表、棧、隊列和樹。每個部分分別包括以下內容:

  1. 線性表

  設計一個線性表,支持插入、刪除、查找、遍歷、求表長度等基本操作,并設計一個簡單的應用程序,模擬學生成績的管理。

  2. 棧

  設計一個棧,支持進棧、出棧、判斷棧是否為空、求棧長度等基本操作,并設計一個簡單的應用程序,模擬計算器實現加減乘除的運算。

  3. 隊列

  設計一個隊列,支持進隊、出隊、判斷隊列是否為空、求隊列長度等基本操作,并設計一個簡單的應用程序,實現圖的廣度優先搜索算法。

  4. 樹

  設計一個二叉樹,支持插入、刪除、查找、遍歷等基本操作,并設計一個應用程序,實現哈夫曼編碼。

  三、設計的實現

  本次實驗采用C語言實現,使用了鏈表和數組兩種數據結構作為存儲方式。

  1. 線性表

  線性表的'實現采用鏈表作為存儲結構,由于鏈表可以動態分配內存,因此可以方便地實現插入和刪除操作。學生成績的管理程序中,可以通過插入、刪除、遍歷等操作實現對學生成績的增刪查改。

  2. 棧

  棧的實現采用數組作為存儲結構,數組大小為100,可以通過定義棧頂指針實現入棧和出棧操作。計算器程序中,通過將中綴表達式轉換為后綴表達式,再通過棧的出棧和進棧操作,實現加減乘除的運算。

  3. 隊列

  隊列的實現采用循環隊列作為存儲結構,隊列大小為100,可以通過定義隊頭和隊尾指針實現出隊和入隊操作。實現圖的廣度優先搜索算法中,每次將隊頭出隊,并將與隊頭相鄰的點入隊,直到隊列為空。

  4. 樹

  樹的實現采用二叉鏈表作為存儲結構,每個節點的數據結構包括節點值、左右子節點指針和父節點指針。哈夫曼編碼程序中,先通過輸入一組字符及其出現頻率,構建哈夫曼樹,再通過遍歷哈夫曼樹,生成哈夫曼編碼。

  四、實驗結果

  本次實驗的四個部分均已順利完成,所有程序均已經通過測試。通過實踐,學生們對線性表、棧、隊列、樹等數據結構的基礎操作和應用有了更深入的理解和掌握。此舉有助于提高學生的程序設計水平和數據結構的應用能力。

數據結構實驗報告2

  1 引言

  產品質量監督檢驗機構(以下簡稱檢驗機構)的基本任務是依據技術標準,對產品進行檢測,出據科學、公正、準確的檢驗報告[1]。檢驗機構的一系列管理措施都是圍繞著這一中心而展開的。檢驗機構在監督檢驗、委托檢驗、第三方仲裁檢驗、流通領域中打擊假冒偽劣產品檢驗等[2]為提高產品質量、保護消費者的合法權益、打擊假冒偽劣產品、促進市場有序競爭,為政府部門提供決策依據先進都起到了很大作用。下面就本系統的工作實際粗略地提出關于檢驗機構如何提高工作效率的一些看法,以供同行交流參考。

  2 提高工作效率的措施

  2.1 標準管理

  標準是檢驗產品的技術依據。根據GB/T 27025 [3]的要求,檢驗機構要保證所使用的標準是現行有效的。如果檢驗依據使用錯誤,可能會導致檢測結果錯誤,或檢驗結論判斷錯誤,從而引發檢測爭議。要做到檢測中所使用的標準現行有效就必須充分利用網絡,通過標準信息網及時查閱并下載相關標準更新的信息。檢測機構應設有專職或兼職標準化工作人員,負責使用標準的檢索、更新并建立標準數據庫及數據庫的日常維護。標準數據庫設有如下信息:標準名稱、標準編號、日期、實施日期、部門、以及作廢、更新、替換信息等內容。檢驗機構內部建立局域網,實現內部聯網,方便各部門人員及時查閱標準信息。為了保證數據庫運行準確無誤,應設置標準更改權限,規定只有標準化負責人員才有權對標準信息進行寫入。其他人員只能查詢和讀取,不能隨意更改。檢驗機構還應規定出具報告中引用的標準必須從標準數據庫中調用。

  2.2 原始記錄格式規范化

  檢驗原始記錄是出具檢驗報告的依據。因此檢驗機構必須重視原始記錄工作,如果將檢測報告被看作是檢驗機構的產品,那么原始記錄就相當于檢測報告所用的原料或半成品。在實際工作中由于對原始記錄工作重視不夠,記錄中存在不少問題。如原始記錄字跡潦草,難以辨認;內容與檢驗報告不符;未記錄引用的檢驗標準、檢驗過程中所使用的儀器設備及設備使用的參數條件;檢測過程涉及的過程數據、公式等記錄不全[4]。為保證檢測報告質量,必須重視原始記錄,做到原始記錄規范、準確和完整,可采取以下措施:將產品標準中所涉及的檢測項目按檢驗方法設立原始記錄,原始記錄中必須包括GB/T 27025 [3]中規定的關于原始記錄要求的全部信息。每項檢測記錄應包含足夠的信息,以便識別不確定度的影響因素,并保證該檢測在盡可能接近原條件的情況下能夠復現。記錄應包括從事各項檢測的人員和結果校核人員的標識、檢測的方法、計算的公式、檢測過程中必要的曲線圖均應有詳細的記錄及使用的重要檢測儀器與設備(含名稱、型號、精度等級)以利于真實反映檢測手段及檢測條件使用情況,檢測記錄是檢測結果的`原始憑證。

  2.3 檢驗過程計算電算化

  對每一類產品所有檢驗項目在檢驗過程中涉及到的計算建立Excel數據庫,將每一檢驗項目計算公式中涉及的參數編制計算程序,檢驗人員只需錄入原始數據,即可得出結果,可以避免檢驗人員用手工或計算器計算的容易出錯的問題,還可以提高數據計算的速度,特別是在完成批量大、涉及的計算量較大的監督抽查、工商委托抽樣任務時可以發揮較大的優勢。

  2.4 檢驗報告

  檢驗報告是檢驗工作全過程形成的結果,是質監、工商、法院等單位執法的重要依據。檢驗報告初稿由承檢負責人編寫.其他承拉人校對并簽名。要提高出具檢驗報告的效率和質量,按照相關規定,要求檢驗報告格式規范;引用的檢驗依據、判定依據正確;報告檢驗數據準確,信息完整無誤。報告進行初審和復審的二級審批制度。報告正本加蓋檢驗報告專用章和騎縫章,保證質檢機構的公正性、科學性和有效性[1]。要提高出具檢驗報告的效率可采取如下措施: 1、將報告格式分類:由于不同檢驗類別的樣品檢驗報告所用的報告格式是不同的,故按不同類別設立報告的規范格式:委托送樣、監督抽查、許可證發證檢驗、委托抽樣檢驗等按不同類別建立數據庫,根據檢驗具體要求從中調用;2、按產品分類:在報告格式分類基礎上,將不同產品按產品標準建立完整的全項目檢驗報告格式,將其中的一些內容設為固定參數,如檢驗項目,對應的技術要求,打報告時只需調用對應的報告格式和對應產品,輸入實際檢測值,再對檢測的項目做適當刪改即可,這樣可以節省大量的輸入、校對及查找技術要求的時間,還減少誤操作的出錯率。

  2.5 文件管理電子化

  電子文檔是相對于傳統的紙質文檔而言,電子文檔具有很多優越性,最突出一點是電子文檔的檢索更為方便、高效,體現在:1、樣品流轉,采用電子文檔記錄樣品編號、數量、檢測項目、送樣單位、接樣日期、要求報告日期等信息,如此記錄的信息便于查找、檢索。2、日常檢驗報告在編制后需要有報告審核的程序。若采用紙質報告,經領導檢查審核后,如發現問題需修改則要重新打印,既浪費又麻煩,若采用電子文檔,可以將檢驗原始記錄用掃描儀掃描成電子文檔,連同編制好的檢驗報告,以電子文件的形式通過局域網傳遞給審核者,審核完畢后傳回業務室進行打印裝訂就可以了。另外,也可以結合本單位的實際情況,運用實驗室管理軟件系統,將日常檢測工作流程如:程序文件、樣品流轉、標準檢索、儀器信息、原始記錄(包括儀器分析圖譜)數據匯總、檢測報告等文件信息輸入系統,再經分析整理,最終形成文件。這樣既便于日常實驗室管理,也使檔案管理工作與日常工作形成一個有機的整體[5]。

  總之,要提高產品質量監督檢驗機構的工作效率,應從檢驗機構內部多個環節齊抓共管,特別是從標準管理、原始記錄格式規范化、檢驗過程計算電算化、檢驗報告、業務室管理和文件管理電子化等方面加強管理,努力提高檢測水平,保證檢測報告質量,維護產品質量檢驗機構的科學性、準確性和公正性。

數據結構實驗報告3

  一、實驗目的及要求

  1)掌握棧和隊列這兩種特殊的線性表,熟悉它們的特性,在實際問題背景下靈活運用它們。

  本實驗訓練的要點是“棧”和“隊列”的觀點;

  二、實驗內容

  1) 利用棧,實現數制轉換。

  2) 利用棧,實現任一個表達式中的語法檢查(選做)。

  3) 編程實現隊列在兩種存儲結構中的'基本操作(隊列的初始化、判隊列空、入隊列、出隊列);

  三、實驗流程、操作步驟或核心代碼、算法片段

  順序棧:

  Status InitStack(SqStack &S)

  {

  S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));

  if(!S.base)

  return ERROR;

  S.top=S.base;

  S.stacksize=STACK_INIT_SIZE;

  return OK;

  }

  Status DestoryStack(SqStack &S)

  {

  free(S.base);

  return OK;

  }

  Status ClearStack(SqStack &S)

  {

  S.top=S.base;

  return OK;

  }

  Status StackEmpty(SqStack S)

  {

  if(S.base==S.top)

  return OK;

  return ERROR;

  }

  int StackLength(SqStack S)

  {

  return S.top-S.base;

  }

  Status GetTop(SqStack S,ElemType &e)

  {

  if(S.top-S.base>=S.stacksize)

  {

  S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));

  if(!S.base) return ERROR;

  S.top=S.base+S.stacksize;

  S.stacksize+=STACKINCREMENT;

  }

  *S.top++=e;

  return OK;

  }

  Status Push(SqStack &S,ElemType e)

  {

  if(S.top-S.base>=S.stacksize)

  {

  S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));

  if(!S.base)

  return ERROR;

  S.top=S.base+S.stacksize;

  S.stacksize+=STACKINCREMENT;

  }

  *S.top++=e;

  return OK;

  }

  Status Pop(SqStack &S,ElemType &e)

  {

  if(S.top==S.base)

  return ERROR;

  e=*--S.top;

  return OK;

  }

  Status StackTraverse(SqStack S)

  {

  ElemType *p;

  p=(ElemType *)malloc(sizeof(ElemType));

  if(!p) return ERROR;

  p=S.top;

  while(p!=S.base)//S.top上面一個...

  {

  p--;

  printf("%d ",*p);

  }

  return OK;

  }

  Status Compare(SqStack &S)

  {

  int flag,TURE=OK,FALSE=ERROR;

  ElemType e,x;

  InitStack(S);

  flag=OK;

  printf("請輸入要進棧或出棧的元素:");

  while((x= getchar)!='#'&&flag)

  {

  switch (x)

  {

  case '(':

  case '[':

  case '{':

  if(Push(S,x)==OK)

  printf("括號匹配成功! ");

  break;

  case ')':

  if(Pop(S,e)==ERROR || e!='(')

  {

  printf("沒有滿足條件 ");

  flag=FALSE;

  }

  break;

  case ']':

  if ( Pop(S,e)==ERROR || e!='[')

  flag=FALSE;

  break;

  case '}':

  if ( Pop(S,e)==ERROR || e!='{')

  flag=FALSE;

  break;

  }

  }

  if (flag && x=='#' && StackEmpty(S))

  return OK;

  else

  return ERROR;

  }

  鏈隊列:

  Status InitQueue(LinkQueue &Q)

  {

  Q.front =Q.rear=

  (QueuePtr)malloc(sizeof(QNode));

  if (!Q.front) return ERROR;

  Q.front->next = NULL;

  return OK;

  }

  Status DestoryQueue(LinkQueue &Q)

  {

  while(Q.front)

  {

  Q.rear=Q.front->next;

  free(Q.front);

  Q.front=Q.rear;

  }

  return OK;

  }

  Status QueueEmpty(LinkQueue &Q)

  {

  if(Q.front->next==NULL)

  return OK;

  return ERROR;

  }

  Status QueueLength(LinkQueue Q)

  {

  int i=0;

  QueuePtr p,q;

  p=Q.front;

  while(p->next)

  {

  i++;

  p=Q.front;

  q=p->next;

  p=q;

  }

  return i;

  }

  Status GetHead(LinkQueue Q,ElemType &e)

  {

  QueuePtr p;

  p=Q.front->next;

  if(!p)

  return ERROR;

  e=p->data;

  return e;

  }

  Status ClearQueue(LinkQueue &Q)

  {

  QueuePtr p;

  while(Q.front->next )

  {

  p=Q.front->next;

  free(Q.front);

  Q.front=p;

  }

  Q.front->next=NULL;

  Q.rear->next=NULL;

  return OK;

  }

  Status EnQueue(LinkQueue &Q,ElemType e)

  {

  QueuePtr p;

  p=(QueuePtr)malloc(sizeof (QNode));

  if(!p)

  return ERROR;

  p->data=e;

  p->next=NULL;

  Q.rear->next = p;

  Q.rear=p; //p->next 為空

  return OK;

  }

  Status DeQueue(LinkQueue &Q,ElemType &e)

  {

  QueuePtr p;

  if (Q.front == Q.rear)

  return ERROR;

  p = Q.front->next;

  e = p->data;

  Q.front->next = p->next;

  if (Q.rear == p)

  Q.rear = Q.front; //只有一個元素時(不存在指向尾指針)

  free (p);

  return OK;

  }

  Status QueueTraverse(LinkQueue Q)

  {

  QueuePtr p,q;

  if( QueueEmpty(Q)==OK)

  {

  printf("這是一個空隊列! ");

  return ERROR;

  }

  p=Q.front->next;

  while(p)

  {

  q=p;

  printf("%d<- ",q->data);

  q=p->next;

  p=q;

  }

  return OK;

  }

  循環隊列:

  Status InitQueue(SqQueue &Q)

  {

  Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));

  if(!Q.base)

  exit(OWERFLOW);

  Q.front=Q.rear=0;

  return OK;

  }

  Status EnQueue(SqQueue &Q,QElemType e)

  {

  if((Q.rear+1)%MAXQSIZE==Q.front)

  return ERROR;

  Q.base[Q.rear]=e;

  Q.rear=(Q.rear+1)%MAXQSIZE;

  return OK;

  }

  Status DeQueue(SqQueue &Q,QElemType &e)

  {

  if(Q.front==Q.rear)

  return ERROR;

  e=Q.base[Q.front];

  Q.front=(Q.front+1)%MAXQSIZE;

  return OK;

  }

  int QueueLength(SqQueue Q)

  {

  return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;

  }

  Status DestoryQueue(SqQueue &Q)

  {

  free(Q.base);

  return OK;

  }

  Status QueueEmpty(SqQueue Q) //判空

  {

  if(Q.front ==Q.rear)

  return OK;

  return ERROR;

  }

  Status QueueTraverse(SqQueue Q)

  {

  if(Q.front==Q.rear)

  printf("這是一個空隊列!");

  while(Q.front%MAXQSIZE!=Q.rear)

  {

  printf("%d<- ",Q.base[Q.front]);

  Q.front++;

  }

  return OK;

  }

數據結構實驗報告4

  蔬菜農殘檢驗是一個復雜的過程,所有檢驗必須經過抽樣、樣品登記、樣品檢驗、報告輸出、數據匯總幾個階段.首先在樣品登記階段時,檢驗機構抽樣人員必須對進入蔬菜批發市場的蔬菜品種進行抽樣,然后立即進行登記,登記內容包括業主的身份及車輛等信息.樣品登記后應該進行樣品檢驗,檢驗數據應輸入管理系統中,經校核后作為最終檢驗結果存檔,然后出具檢驗報告.所有檢驗數據必須于第二天上報檢驗機構總部,再由檢驗機構總部上報市政府備案.因為本部距離農殘檢驗站很遠,這段工作通常是第二天由專人開車到農殘檢驗站獲取檢驗記錄單再回質檢機構總部錄入匯總,這種工作方式費時費力,無法滿足工作要求,需要設計出即時數據傳輸功能.另外檢驗報告出具后需在檢驗機構總部存檔,因此還需設計出檢驗數據查詢功能供管理者和使用者對檢驗數據進行查詢統計.

  一、PRIM的體系結構

  PRIM系統的架構分為數據庫部分和客戶端部分和數據上傳部分,數據庫部分采用MSSQL數據庫,客戶端采用.net技術開發.數據庫安裝在服務器,客戶端裝在檢驗部門、總部管理部門,登記人員、檢驗人員、管理員和總部管理人員根據各自權限分別可進行登記、檢驗、檢驗數據處理、權限設定、各種查詢、數據上傳等工作.總部可以實現遠程監控檢驗機構的檢驗行為和及時調用、查詢、分析檢驗結果.通過開放接口,實現總部實驗室管理系統和現場實現對接,從而提高檢驗數據上報時間,簡化操作步驟.檢驗數據保存后,通過PRIM系統提供的接口,使相關工作人員可以調出檢驗數據進行查詢、分析、匯總,提高了數據的使用效率.另外,使用者可以通過查詢統計調用需要的數據.

  二、系統模塊設計

  3.1基礎模塊

  基礎模塊包括數據庫設計、人員設置、基本信息設置等部分,數據庫部分可以采用ACCESS、SQL等數據庫,ACCESS數據庫數據處理和統計分析十分方便,利用ACCESS處理十萬條級以下記錄數據時速度快且操作方便.但是如果處理大的數據(百萬條記錄以上)以及復雜查詢ACCESS有時不穩定易導致系統崩潰,另外,ACEESS數據庫適用于單用戶還可以,在處理多用戶時就顯得數據處理能力不夠.相比較而言,MSSQL具備相對穩定處理大數據的能力,但是查詢設計代碼編寫復雜,不容易被開發掌握,作為一個重要的檢驗管理系統,穩定是第一要的,而且每天處理的數據量達到幾千條,很快就會超過幾十萬條記錄,所以農殘檢驗管理系統采用SQL數據庫是合適的.客戶端采用.net作為編程語言.

  3.2報告輸出模塊

  報告輸出的形式有多種,可以采用數據鏈接的方式實現管理系統與OFFICE文檔的輸出,這種方法的優點是開發方便,適應性強,缺點是不穩定,有時會出現亂碼現象.第二種方法是采用.net語言把報告寫在編碼里,這種方法比較繁瑣,開發周期長,但是功能強大.系統工作穩定,不會出現亂碼現象,所以報告輸出方面采用.net編程方式進行.

  3.3數據匯總查詢

  在進行信息查詢和統計時,經常同時牽涉到幾個數據表,這就必須考慮數據表之間的數據關聯性[1].數據匯總的實現可以通過多個途徑實現,首先可以編程實現,即通過ADO.NET實現各種查詢統計的功能,在多層次查詢時可以采用普通的組合查詢方式,也可采用“SHAPE...APPEND”以及“SHAPE...COMPUTE”等高級語句生成關系層次和參數化以及組合層次進行復雜條件的查詢.其次,也可采用在數據庫實現編寫存儲過程再調用的查詢方式.數據遠程傳遞是一個復雜過程,它涉及到諸多方面的問題,包括遠程服務器和本地服務器的硬件對接,數據的實時性、數據傳遞的'便捷性、數據的大小、及遠程查詢等諸多軟件對接問題,對此,作者專門開發了LDTD(LONGDISTANCETRANSPORTDATA)技術,用于處理遠程數據傳遞問題.遠程數據傳遞應注意的問題是數據傳輸以4096個字節為一個單位,所以每次數據傳遞盡量優化在4096個字節以下,這樣的傳輸才能快捷.

  三、應用實例

  是按照鞍山市產品質量監督檢驗所要求開發的PRIM系統的運行界面.抽樣登記人員從登錄窗口登錄主界面后,輸入基本信息后,系統自動生成產品檢驗編號,然后通過任務界面提交檢驗申請并發送,這樣,檢驗員接到任務后開始檢驗并出具檢驗報告,然后上傳檢驗結果.在所有的檢驗測試數據都輸入到系統數據庫進行保存后,檢驗員還可以查詢登記情況和檢驗結果.管理人員及其他需要用到檢驗測試數據的人員可以通過查詢統計模塊進行查詢、統計,并可以生成相應的分析圖,使得相關部門可以直觀地看到農產品農藥殘留情況.甚至還可以預測一定時期內農產品農藥殘留的走勢,為其做出相應決策提供可靠的依據.沒有使用PRIM計算機管理程序之前,檢驗人員做完實驗后用word文檔出具一份檢驗報單告需5min左右時間,200份檢驗報告需要1000min左右.加上匯總及改錯等時間,處理檢驗的時間需要一個人用大致1040min去完成.而使用PRIM計算機管理系統后,處理一份報告平均只需1min完成,200份檢驗報告共需200min左右時間,同時出錯率低,數據實時上傳,無需匯總,合計共省去約940min寶貴時間,處理檢驗報告工作量是未使用計算機管理程序時工作量的1/5.經使用單位使用,5個人的工作量可以4個人完成,極大地提高了檢驗工作效率,得到了使用單位的認可.

  四、結束語

數據結構實驗報告5

  一、實驗目的

  1、掌握數據結構中隊列和棧的基本概念、特性及操作。

  2、通過編程實踐,加深理解隊列和棧的順序存儲和鏈式存儲的實現方法。

  3、鍛煉編程能力和算法設計能力,提升解決實際問題的能力。

  二、實驗內容

  1、實現順序棧的基本操作(初始化、判空、入棧、出棧)。

  2、實現鏈式隊列的。基本操作(初始化、判空、入隊、出隊)。

  三、實驗步驟及核心代碼

  1、順序棧的實現

  (1)定義順序棧的`數據結構

  (2)順序棧的初始化

  (3)順序棧的判空操作

  (4)順序棧的入棧操作

  (5)順序棧的出棧操作(略)

  2、鏈式隊列的實現

  (1)定義鏈式隊列的數據結構(節點和隊列)

  (2)鏈式隊列的初始化(略)

  (3)鏈式隊列的判空操作(略)

  (4)鏈式隊列的入隊操作(略)

  (5)鏈式隊列的出隊操作(略)

  四、實驗結果與分析

  1、順序棧的實驗結果與分析(包括測試數據、執行結果、問題分析等)。

  2、鏈式隊列的實驗結果與分析(包括測試數據、執行結果、問題分析等)。

  五、實驗總結

  通過本次實驗,我深入理解了數據結構中隊列和棧的基本概念、特性及操作,并通過編程實踐掌握了隊列和棧的順序存儲和鏈式存儲的實現方法。在實驗過程中,我遇到了一些困難和問題,但通過查閱資料、調試代碼和與同學討論,最終都得到了解決。這次實驗不僅鍛煉了我的編程能力和算法設計能力,還提升了我解決實際問題的能力。

數據結構實驗報告6

  《數據結構與算法》實驗報告

  專業 班級 姓名 學號

  實驗項目

  實驗一 二叉樹的應用

  實驗目的

  1、進一步掌握指針變量的含義及應用。

  2、掌握二叉樹的結構特征,以及各種存儲結構的特點及使用范圍。

  3、掌握用指針類型描述、訪問和處理二叉樹的運算。

  實驗內容

  題目1:編寫一個程序,采用一棵二叉樹表示一個家譜關系。要求程序具有如下功能:

  (1)用括號表示法輸出家譜二叉樹,

  (2)查找某人的所有兒子,

  (3)查找某人的所有祖先。

  算法設計分析

  (一)數據結構的定義

  為了能夠用二叉樹表示配偶、子女、兄弟三種關系,特采用以下存儲關系,則能在二叉樹上實現家譜的'各項運算。

  二叉樹型存儲結構定義為:

  typedef struct SNODE

  {char name[MAX]; //人名

  struct SNODE *left;//指向配偶結點

  struct SNODE *right; //指向兄弟或子女結點

  }FNODE;

  (二)總體設計

  實驗由主函數、家譜建立函數、家譜輸出函數、兒子查找函數、祖先查找函數、結點定位函數、選擇界面函數七個函數共同組成。其功能描述如下:

  (1)主函數:統籌調用各個函數以實現相應功能

  void main()

  (2)家譜建立函數:與用戶交互建立家族成員對應關系

  void InitialFamily(FNODE *&head) //家譜建立函數

  (3)家譜輸出函數:用括號表示法輸出家譜

  輸出形式為:父和母(子1和子妻1(孫1),子2和子妻2(孫2))

  void PrintFamily(FNODE *head) //家譜輸出函數

  (4)兒子查找函數:在家譜中查找到某人所有的子女并輸出,同時也能辨別出其是否為家族成員與是否有子女

  void FindSon(FNODE *b,char p[]) //兒子查找函數

  (5)祖先查找函數:在家譜中查找到某人所有的祖先并輸出,同時也能辨別出其是否為家族中成員。

  int FindAncestor(FNODE *head,char son[ ]) //祖先查找函數

  (6)結點定位函數:在家譜中找到用戶輸入人名所對應的結點。

  FNODE *findnode(FNODE *b,char p[]) //結點定位函數

  (7)選擇界面函數:為便于編寫程序,將用戶選擇部分獨立為此函數。

  void PRINT(int &n)

  (三)各函數的詳細設計:

  void InitialFamily(FNODE *&head) //家譜建立函數

  1:首先建立當前人的信息,將其左右結點置為空,

  2:然后讓用戶確定其是否有配偶,如果沒有配偶,則當前程序結束,

  3:如果有則建立其配偶信息,并將配偶結點賦給當前人的左結點;

  4:再讓用戶確定其是否有子女,如果有則遞歸調用家譜建立函數建立子女結點,并將其賦給配偶結點的下一個右結點。

  5:如無,則程序結束

  void PrintFamily(FNODE *head) //家譜輸出函數

  1:首先判斷當前結點是否為空,如果為空則結束程序;

  2:如果不為空,則輸出當前結點信息,

  3:然后判斷其左結點(配偶結點)是否為空,如不為空則輸出“和配偶信息。

  4:再判斷配偶結點的右結點是否為空,如不為空則遞歸調用輸出其子女信息,最后輸出“)”;

  5:當配偶結點為空時,則判斷其右結點(兄弟結點)是否為空

  6:如果不為空,則輸出“,”,并遞歸調用輸出兄弟信息

  7程序結束

  FNODE *findnode(FNODE *b,char p[]) //結點定位函數

  1:當前結點是否為空,為空則返回空;

  2:如果和查找信息相同,則返回當前結點;

  3:如不然,則先后遞歸訪問其左結點,再不是則遞歸訪問右結點

  void FindSon(FNODE *b,char p[]) //兒子查找函數

  1:在家譜中定位到要查找的結點,如無則輸出“查找不到此人”

  2:判斷其配偶結點與子女結點是否為空,為空則輸出“無子女”

  3:不為空則輸出其配偶結點的所有右結點(子女結點)。

  int FindAncestor(FNODE *head,char son[ ]) //祖先查找函數

  1:先在家譜中定位到要查找的結點,如為空輸出“不存在此人”,程序結束

  2:先將父母結點入棧,當棧為空時程序結束,

  3:棧不為空時,判斷棧頂元素是否已訪問過,

  4:訪問過,再判斷是否為查找結點,如是則輸出棧中保存的其祖先結點,并濾過其兄弟結點不輸出;不是查找結點,則退棧一個元素

  5:未訪問過,則取當前棧頂元素,置訪問標志——1,同時取其右結點

  6:棧不為空或當前所取結點不為空時,轉到2;

  實驗測試結果及結果分析

  (一)測試結果

  (二)結果分析

  (略)

  實驗總結

  (略)

【數據結構實驗報告】相關文章:

數據結構實驗報告范例08-10

實驗報告06-21

測試實驗報告07-10

焊接實驗報告03-15

示波器實驗報告06-24

學生實驗報告10-09

大學實驗報告11-16

小學實驗報告(精選)11-04

最新實驗報告10-14

主站蜘蛛池模板: 男人激烈吮乳吃奶动图| 国产精品国语对白露脸在线播放| 国产免费又爽又色又粗视频| 99久久久国产精品免费蜜臀| 日本三级香港三级三级人!妇久| 深夜福利啪啪片| 亚洲欧美综合精品成人导航| 亚洲成a人v欧美综合天堂麻豆| 欧亚乱熟女一区二区在线| 久久久无码精品亚洲日韩精东传媒| 无码爆乳护士让我爽| 国产亚洲3p无码一区二区| 农民人伦一区二区三区| 久青草影院在线观看国产| 色偷偷亚洲精品一区二区| 国产精品人人妻人人爽人人牛| av无码天一区二区一三区| 国产午夜福利精品一区二区三区| 丰满熟妇乱子伦| 色悠久久久久综合欧美99| 青青草原综合久久大伊人| 人妻少妇| 精品亚洲成av人在线观看| 亚洲国产精品尤物yw在线观看| 成人区人妻精品一区二区不卡| 女人被狂躁的高潮免费视频| 性高朝久久久久久久久久| 亚洲国产婷婷六月丁香| 亚洲精品中文字幕无码av| 日本在线视频www色| 国产三级精品三级在专区| 亚洲乱码卡一卡二卡新区中国| 岛国4k人妻一区二区三区| 久久婷婷国产综合精品| 欧美亚洲日韩国产综合电影| 欧美国产一区二区三区激情无套| 久久久久亚洲av成人无码网站| 成人影院yy111111在线| 好屌爽在线视频| 久久婷婷五月综合中文字幕| av在线播放日韩亚洲欧我不卡|