計(jì)算機(jī)軟件實(shí)驗(yàn)報(bào)告_第1頁(yè)
計(jì)算機(jī)軟件實(shí)驗(yàn)報(bào)告_第2頁(yè)
計(jì)算機(jī)軟件實(shí)驗(yàn)報(bào)告_第3頁(yè)
計(jì)算機(jī)軟件實(shí)驗(yàn)報(bào)告_第4頁(yè)
計(jì)算機(jī)軟件實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)一單鏈表的運(yùn)算源程序:#include <stdio.h>#include <stdlib.h>/*單鏈表的定義*/typedef int DataType;/*DataType可以是任何相應(yīng)的數(shù)據(jù)類型如int, float或char*/typedef struct node/*結(jié)點(diǎn)類型定義*/DataType data;/*結(jié)點(diǎn)的數(shù)據(jù)域*/struct node *next;/*結(jié)點(diǎn)的指針域*/ListNode;typedef ListNode *LinkList;int i;DataType key,x;LinkList head;ListNode *p; /*

2、單鏈表的建立,從后向前生成*/LinkList CreateList(void)LinkList p=NULL,q;int x;scanf("%d",&x);while(x!=0)q=(LinkList) malloc (sizeof(ListNode);q->data=x;q->next=p;p=q;scanf("%d",&x);return p;/*單鏈表的打印*/void PrintList(LinkList head)LinkList p;p=head;if(p=NULL)printf("單鏈表為空n&quo

3、t;);while(p!=NULL)printf("%d ",p->data);p=p->next;printf("n");/*單鏈表的查找,輸入一個(gè)整數(shù),顯示該結(jié)點(diǎn)的位置*/LinkList LocateNode(DataType key)/*在不帶頭結(jié)點(diǎn)的單鏈表head中查找其值為key的結(jié)點(diǎn)*/LinkList p;p=head;while(p!=NULL)if(p->data=key)break;p=p->next;if(p=NULL)printf("沒有key這個(gè)值n");elseprintf(&qu

4、ot;找到keyn");return p;/*單鏈表的查找2,在不帶頭結(jié)點(diǎn)的單鏈表head中查找第i個(gè)結(jié)點(diǎn)*/LinkList GetNode(int i)LinkList p; int j=0;if(i<0)printf("ERRORn");exit(1);p=head;doj+;if(j=i)break;p=p->next;while(p!=NULL);if(p=NULL)printf("沒有第i個(gè)結(jié)點(diǎn)n");return p;/*單鏈表的插入*/void InsertList(DataType x,int i)/*將值為x的新

5、結(jié)點(diǎn)插入到不帶頭結(jié)點(diǎn)的單鏈表head的第i個(gè)結(jié)點(diǎn)的位置上*/LinkList p,q;if(i=1)q=(LinkList)malloc(sizeof(ListNode);q->data=x;q->next=head;head=q;elsep=GetNode(i-1);if(p=NULL)printf("無法插入n");elseq=(LinkList)malloc(sizeof(ListNode);q->data=x;q->next=p->next;p->next=q;/*單鏈表的刪除,刪除不帶頭結(jié)點(diǎn)的單鏈表中的第i個(gè)結(jié)點(diǎn)*/void D

6、eleteList(int i)LinkList p,q;if(head=NULL)printf("無法刪除n");exit(0);if(i=1)head=head->next;elsep=GetNode(i-1);if(p=NULL|p->next=NULL)printf("無法刪除n");exit(1);elseq=p->next;p->next=q->next;void main()printf("輸入單鏈表的值:n");head=CreateList();/*建立單鏈表*/PrintList(he

7、ad);/*打印單鏈表*/printf("輸入要查找的值:n");scanf("%d",&key);p=LocateNode(key);/*單鏈表查找*/printf("請(qǐng)輸入欲插入元素的位置:n");scanf("%d",&i);printf("請(qǐng)輸入欲插入的元素:n");scanf("%d",&x);InsertList(x,i);/*單鏈表插入*/PrintList(head);/*打印單鏈表*/printf("請(qǐng)輸入欲刪除結(jié)點(diǎn)的位置:

8、n");scanf("%d",&i);DeleteList(i);/*單鏈表刪除*/PrintList(head);/*打印單鏈表*/運(yùn)行結(jié)果:運(yùn)行結(jié)果基本符合實(shí)驗(yàn)要求,實(shí)驗(yàn)完成。一、 實(shí)驗(yàn)中出現(xiàn)的問題及對(duì)問題的解決方案1、 不能在位置1插入元素,并且不能刪除第一個(gè)節(jié)點(diǎn)。原因是在插入和刪除函數(shù)中將head作為形參傳遞,只傳遞了head指向的地址,不管對(duì)形參如何修改,并不能改變head的值。解決方案是將head作為全局變量,并且不用head形參傳輸,直接對(duì)head進(jìn)行修改。2、 當(dāng)輸入插入元素位置i小于零時(shí),程序運(yùn)行錯(cuò)誤。原因是在GetNode()函數(shù)中沒有

9、對(duì)應(yīng)i小于零的情況。解決方案是在GetNode()種添加對(duì)應(yīng)i小于零的情況。3、 當(dāng)刪除第i(i>1)個(gè)結(jié)點(diǎn)時(shí),刪除的是地i+1個(gè)結(jié)點(diǎn)。原因是在刪除時(shí)是刪除的查找到的元素后面的元素。解決方案是在查找時(shí)直接查找第i-1個(gè)結(jié)點(diǎn),這樣刪除的元素便是第i個(gè)。4、 當(dāng)單鏈表中有i個(gè)元素時(shí),若輸入欲刪除結(jié)點(diǎn)為i+1時(shí),程序運(yùn)行錯(cuò)誤。原因是此時(shí)查找到的元素是第i個(gè)p->=NULL,無法執(zhí)行q=p->next; p->next=q->next;語句。解決方案是在p->=NULL時(shí),直接顯示“無法刪除”。二、 思考題如果生成帶頭結(jié)點(diǎn)的單鏈表,程序應(yīng)如何修改?答:修改后的程序?yàn)?/p>

10、:#include <stdio.h>#include <stdlib.h>/*單鏈表的定義*/typedef int DataType;/*DataType可以是任何相應(yīng)的數(shù)據(jù)類型如int, float或char*/typedef struct node/*結(jié)點(diǎn)類型定義*/DataType data;/*結(jié)點(diǎn)的數(shù)據(jù)域*/struct node *next;/*結(jié)點(diǎn)的指針域*/ListNode;typedef ListNode *LinkList;/*單鏈表的建立,從后向前生成*/LinkList CreateList(void)LinkList p=NULL,q;in

11、t x;scanf("%d",&x);while(x!=0)q=(LinkList) malloc (sizeof(ListNode);q->data=x;q->next=p;p=q;scanf("%d",&x);return p;/*單鏈表的打印*/void PrintList(LinkList head)LinkList p;p=head->next;if(p=NULL)printf("單鏈表為空n");while(p!=NULL)printf("%d ",p->data

12、);p=p->next;printf("n");/*單鏈表的查找,輸入一個(gè)整數(shù),顯示該結(jié)點(diǎn)的位置*/LinkList LocateNode(LinkList head,DataType key)/*在帶頭結(jié)點(diǎn)的單鏈表head中查找其值為key的結(jié)點(diǎn)*/LinkList p;p=head;while(p!=NULL)if(p->data=key)break;p=p->next;if(p=NULL)printf("沒有key這個(gè)值n");elseprintf("找到keyn");return p;/*單鏈表的查找2,在帶

13、頭結(jié)點(diǎn)的單鏈表head中查找第i個(gè)結(jié)點(diǎn)*/LinkList GetNode(LinkList head,int i)LinkList p; int j=0;p=head;if(i<=0)printf("ERRORn");exit(1);while(p!=NULL)j+;if(j=i)break;p=p->next;if(p=NULL)printf("沒有第i個(gè)結(jié)點(diǎn)n");return p;/*單鏈表的插入*/void InsertList(LinkList head,DataType x,int i)/*將值為x的新結(jié)點(diǎn)插入到帶頭結(jié)點(diǎn)的單鏈表

14、head的第i個(gè)結(jié)點(diǎn)的位置上*/LinkList p,q;p=GetNode(head,i);if(p=NULL)printf("無法插入n");elseq=(LinkList)malloc(sizeof(ListNode);q->data=x;q->next=p->next;p->next=q;/*單鏈表的刪除,刪除帶頭結(jié)點(diǎn)的單鏈表中的第i個(gè)結(jié)點(diǎn)*/void DeleteList(LinkList head,int i)LinkList p,q;p=GetNode(head,i);if(head->next=NULL|p=NULL|p->

15、;next=NULL)printf("無法刪除n");exit(0);elseq=p->next;p->next=q->next;void main()int i;DataType key,x;LinkList head;ListNode *p;p=(LinkList) malloc (sizeof(ListNode);p->next=NULL;head=p;printf("輸入單鏈表的值:n");head->next=CreateList();/*建立單鏈表*/PrintList(head);/*打印單鏈表*/printf

16、("輸入要查找的值:n");scanf("%d",&key);p=LocateNode(head,key);/*單鏈表查找*/printf("請(qǐng)輸入欲插入元素的位置:n");scanf("%d",&i);printf("請(qǐng)輸入欲插入的元素:n");scanf("%d",&x);InsertList(head,x,i);/*單鏈表插入*/PrintList(head);/*打印單鏈表*/printf("請(qǐng)輸入欲刪除結(jié)點(diǎn)的位置:n");

17、scanf("%d",&i);DeleteList(head,i);/*單鏈表刪除*/PrintList(head);/*打印單鏈表*/三、 實(shí)驗(yàn)總結(jié)通過這個(gè)實(shí)驗(yàn)加深了我對(duì)單鏈表的認(rèn)識(shí),學(xué)會(huì)了簡(jiǎn)單單鏈表的建立,查找,插入和刪除等基本運(yùn)算,并對(duì)運(yùn)用C語言上機(jī)調(diào)試單鏈表的基本方法有了初步了解。通過這個(gè)實(shí)驗(yàn)也使我認(rèn)識(shí)到自己編程能力較差,在以后的學(xué)習(xí)中,應(yīng)該加強(qiáng)編程方面的學(xué)習(xí)。 實(shí)驗(yàn)二 二叉樹的建立和遍歷/要求采用二叉鏈表作為存儲(chǔ)結(jié)構(gòu),完成二叉樹的建立,前序、中序和后序遍歷的操作,求所有葉子及結(jié)點(diǎn)總數(shù)的操作等#include <stdio.h>#include

18、<string.h>#include <malloc.h>#include <stdlib.h>#define NULL 0typedef char DataType;typedef struct BinTNode DataType data; struct BinTNode *rchild,*lchild;BinTNode,*BinTree;/創(chuàng)建二叉數(shù)void Create(BinTree *T) char ch; if(ch = getchar() = '*') /輸入'*'時(shí)該節(jié)點(diǎn)為空 *T = NULL; else

19、*T = (BinTree)malloc(sizeof(BinTNode); (*T)->data = ch; Create(&(*T)->lchild); Create(&(*T)->rchild); /先序遍歷二叉樹void PreOrder(BinTree T) if(T) printf("%c",T->data); PreOrder(T->lchild); PreOrder(T->rchild); /中序遍歷二叉樹void InOrder(BinTree T) if(T) InOrder(T->lchild)

20、; printf("%c",T->data); InOrder(T->rchild); /后序遍歷二叉樹void PostOrder(BinTree T) if(T) PostOrder(T->lchild); PostOrder(T->rchild); printf("%c",T->data); /用廣義表表示二叉樹void ListPrint(BinTree T) if(T) printf("%c",T->data); if(T->lchild != NULL | T->rchild

21、 != NULL) printf("("); ListPrint(T->lchild); if(T->lchild != NULL) printf(","); ListPrint(T->rchild); printf(")"); /用凹入表表示二叉樹void DisplayPrint(BinTree T,int lay) if(T = NULL) return; for(int i=0;i<lay;i+) printf(" "); printf("%cn",T->d

22、ata); DisplayPrint(T->lchild,lay+1); DisplayPrint(T->rchild,lay+1); /求結(jié)點(diǎn)的個(gè)數(shù)int Node(BinTree T) int static N=0; if(T) Node(T->lchild); N+; Node(T->rchild); return N;/求葉子的個(gè)數(shù)int Leaf(BinTree T) int static L=0; if(T) Leaf(T->lchild); if(!(T->lchild|T->rchild)/沒有左子樹和右子樹,就是葉子 L+; Leaf

23、(T->rchild); return L;/交換左子樹和右子樹void Change(BinTree *T) if(*T) BinTNode *temp; Change(&(*T)->lchild); Change(&(*T)->rchild); temp=(*T)->lchild; (*T)->lchild=(*T)->rchild; (*T)->rchild=temp; void main() BinTree T; printf("輸入先序序列:"); Create(&T); printf("

24、輸出先序遍歷:"); PreOrder(T); printf("n"); printf("輸出中序遍歷:"); InOrder(T); printf("n"); printf("輸出后序遍歷:"); PostOrder(T); printf("n"); printf("輸出廣義表表示法:"); ListPrint(T); printf("n"); printf("輸出凹入表表示法:n"); DisplayPrint(T,1);

25、 printf("結(jié)點(diǎn)的個(gè)數(shù):nodes = %dn",Node(T); printf("葉子的個(gè)數(shù):leaves = %dn",Leaf(T); Change(&T); printf("交換左右子樹,并用廣義表表示法:"); ListPrint(T); printf("n");思考題#include<stdio.h>#include<stdlib.h>typedef struct BiTNodechar data; struct BiTNode *lchild,*rchild;Bi

26、TNode,*BiTree;void CreatBiTree(BiTree &T)/前序法創(chuàng)建二叉樹char ch;if(ch=getchar()='n')T=NULL;elseT=(BiTNode*)malloc(sizeof(BiTNode);if(!T)exit(1);T->data=ch;CreatBiTree(T->lchild);CreatBiTree(T->rchild);實(shí)驗(yàn)三 二叉排序樹的建立與查找#include <stdlib.h>#include <stdio.h>#define NULL 0typede

27、f int KeyType;typedef struct KeyType key;ElemType; /元素類型typedef struct BiTNode ElemType data; struct BiTNode *lchild,*rchild;BiTNode,*BiTree;BiTree find(BiTree root,KeyType key) /在二叉排序樹中查找其關(guān)鍵字等于給定值的結(jié)點(diǎn)是否存在,并輸出相應(yīng)信息 BiTNode *p; p=root; if (p=NULL) return NULL; else if (p->data.key=key) return p; els

28、e if (key<p->data.key) return find(p->lchild,key); else return find(p->rchild,key);void Insert(BiTree *p,BiTree t) /在二叉排序樹中插入一個(gè)新結(jié)點(diǎn) if (*p=NULL) *p=t; else if(t->data.key<(*p)->data.key) Insert(&(*p)->lchild),t); else if(t->data.key>(*p)->data.key) Insert(&(*p

29、)->rchild),t);void inorder(BiTree p) /中序遍歷所建二叉排序樹,將得到一個(gè)按關(guān)鍵字有序的元素序列 if(p!=NULL) inorder(p->lchild); printf("%5d",(p->data).key); inorder(p->rchild); void main() char ch; KeyType key; BiTree p,s; int i=0; printf("Please input datas (9999:end):n");/建立一棵二叉排序樹,元素值從鍵盤輸入,直到輸

30、入關(guān)鍵字等于9999為止 scanf("%4d",&key); p=NULL; while(key!=9999) s=(BiTree)malloc(sizeof(BiTNode); (s->data).key=key; s->lchild=s->rchild=NULL; Insert(&p,s); scanf("%d",&key); printf("Create is completedn"); inorder(p); /中序遍歷已建立的二叉排序樹 printf("n");

31、 do /二叉排序樹的查找,可多次查找,并輸出查找的結(jié)果 printf("Input the key you want to search:"); scanf("%4d",&key); s=find(p,key); if (s!=NULL) printf("success,the value is %4d ",s->data.key); else printf("unsuccess"); printf("ncontinue?y:nn");getchar(); ch=getchar(

32、); while(ch='y'|ch='Y'); 運(yùn)行結(jié)果:Please input datas (9999:end):0 65 45 78 52 12 35 46 879 584 213 9999Create is completed 0 12 35 45 46 52 65 78 213 584 879Input the key you want to search:0success,the value is 0continue?y:nyInput the key you want to search:65success,the value is 65cont

33、inue?y:nyInput the key you want to search:66unsuccesscontinue?y:nnPress any key to continue實(shí)驗(yàn)四 windows操作系統(tǒng)及應(yīng)用注冊(cè)表的的備份和恢復(fù):首先用下列方法將注冊(cè)表備份到C盤根目錄下,并命名為MyregiestBack。然后打開注冊(cè)表,細(xì)致觀察注冊(cè)表的結(jié)構(gòu)以及存放的內(nèi)容,做好觀察記錄。最后恢復(fù)備份的注冊(cè)表。 用注冊(cè)表編輯器導(dǎo)出和引入注冊(cè)表文件 用Regedt32導(dǎo)出和導(dǎo)入注冊(cè)表 在MSDOS命令行模式下導(dǎo)出和導(dǎo)入注冊(cè)表文件 使用注冊(cè)表檢查器備份/恢復(fù)注冊(cè)表 使用MS Backup工具備份/恢復(fù)Wi

34、ndows 98/Me/ NT/2000/XP注冊(cè)表清理、優(yōu)化注冊(cè)表 注冊(cè)表中存放了大量信息,經(jīng)過長(zhǎng)時(shí)間的使用以后,其中有些表項(xiàng)是多余的,所以只有清理和優(yōu)化注冊(cè)表才能保證系統(tǒng)高速穩(wěn)定地運(yùn)行??梢杂孟铝蟹椒ㄇ謇?、優(yōu)化注冊(cè)表: 重新生成整個(gè)注冊(cè)表,重新建立的注冊(cè)表文件往往比原來的要小很多,從而達(dá)到優(yōu)化注冊(cè)表的目的。 刪除 “開始”菜單中“運(yùn)行”的程序執(zhí)行記錄、系統(tǒng)打開各類文件的歷史記錄、一些常用軟件各自的文件打開記錄以及一些多余的窗口配色方案等。這樣一類的東西都是可有可無的,刪除它們并不會(huì)對(duì)系統(tǒng)運(yùn)行造成多大的影響。 刪除存儲(chǔ)在HKEY_LASS ROOT鍵下一些失效的關(guān)聯(lián)文件。 刪除HKEY_LO

35、CAL_MACHINEsoftware、HKEY_CURRENT_USERsoftware和HKEY_USERS.DEFAULTsoftware鍵下一些已卸載的殘留鍵值。 刪除一些無用的DLL等文件。 借助注冊(cè)表清理軟件來清理、優(yōu)化注冊(cè)表 六大根鍵的作用在注冊(cè)表中,所有的數(shù)據(jù)都是通過一種樹狀結(jié)構(gòu)以鍵和子鍵的方式組織起來,十分類似于目錄結(jié)構(gòu)。每個(gè)鍵都包含了一組特定的信息,每個(gè)鍵的鍵名都是 和它所包含的 信息相關(guān)的。如果這個(gè)鍵包含子鍵,則在注冊(cè)表編輯器窗口中代表這個(gè)鍵的文件夾的左邊將有“”符號(hào),以表示在這個(gè)文件夾中有更多的內(nèi)容。如果這個(gè)文件夾被用戶打開了,那么這個(gè)“”就會(huì)變成“”。1.HKEY_U

36、SERS該根鍵保存了存放在本地計(jì)算機(jī)口令列表中的用戶標(biāo)識(shí)和密碼列表。每個(gè)用戶的預(yù)配置信息都存儲(chǔ)在HKEY_USERS根鍵中。HKEY_USERS是遠(yuǎn)程計(jì)算機(jī)中訪問的根鍵之一。2.HKEY_CURRENT_USER該根鍵包含本地工作站中存放的當(dāng)前登錄的用戶信息,包括用戶登錄用戶名和暫存的密碼(注:此密碼在輸入時(shí)是隱藏的)。用戶登錄Windows 98時(shí),其信息從HKEY_USERS中相應(yīng)的項(xiàng)拷貝到HKEY_CURRENT_USER中。3.HKEY_CURRENT_CONFIG 該根鍵存放著定義當(dāng)前用戶桌面配置(如顯示器等)的數(shù)據(jù),最后使用的文檔列表(MRU)和其他有關(guān)當(dāng)前用戶的Windows 9

37、8中文版的安裝的信息。4.HKEY_CLASSES_ROOT 根據(jù)在Windows 98中文版中安裝的應(yīng)用程序的擴(kuò)展名,該根鍵指明其文件類型的名稱。 在第一次安裝Windows 98中文版時(shí),RTF(Rich Text format)文件與寫字板(WordPad)&127;聯(lián)系起來,但在以后安裝了中文Word 6.0后,雙擊一個(gè)RTF文件時(shí),將自動(dòng)激活Word。存放在SYSTEM.DAT中的HKEY_CLASSES_ROOT,將替代WIN.INI文件中的Extensions&127;小節(jié)中的設(shè)置項(xiàng),它把應(yīng)用程序與文件擴(kuò)展聯(lián)系起來,它也替代了Windows 3.x中的Reg.dat文件中的相似的設(shè)置項(xiàng)。5.HKEY_LOCAL_MACHINE 該根鍵存放本地計(jì)算機(jī)硬件數(shù)據(jù),此根鍵下

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論