




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一单链表的运算源程序:#include #include /*单链表的定义*/typedef int DataType;/*DataType可以是任何相应的数据类型如int, float或char*/typedef struct node/*结点类型定义*/DataType data;/*结点的数据域*/struct node *next;/*结点的指针域*/ListNode;typedef ListNode *LinkList;int i;DataType key,x;LinkList head;ListNode *p; /*单链表的建立,从后向前生成*/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);while(p!=NULL)printf(%d ,p-data);p=p-next;printf(n);/*单链表的查找,输入一个整数,显示该结点的位置*/LinkList LocateNode(DataType key)/*在不带头结点的单链表head中查找其值为key的结点*/LinkList p;p=head;while(p!=NULL)if(p-data=key)break;p=p-next;if(p=NULL)printf(没有key这个值n);elseprintf(找到keyn);return p;/*单链表的查找2,在不带头结点的单链表head中查找第i个结点*/LinkList GetNode(int i)LinkList p; int j=0;if(inext;while(p!=NULL);if(p=NULL)printf(没有第i个结点n);return p;/*单链表的插入*/void InsertList(DataType x,int i)/*将值为x的新结点插入到不带头结点的单链表head的第i个结点的位置上*/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;/*单链表的删除,删除不带头结点的单链表中的第i个结点*/void DeleteList(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(head);/*打印单链表*/printf(输入要查找的值:n);scanf(%d,&key);p=LocateNode(key);/*单链表查找*/printf(请输入欲插入元素的位置:n);scanf(%d,&i);printf(请输入欲插入的元素:n);scanf(%d,&x);InsertList(x,i);/*单链表插入*/PrintList(head);/*打印单链表*/printf(请输入欲删除结点的位置:n);scanf(%d,&i);DeleteList(i);/*单链表删除*/PrintList(head);/*打印单链表*/运行结果:运行结果基本符合实验要求,实验完成。一、 实验中出现的问题及对问题的解决方案1、 不能在位置1插入元素,并且不能删除第一个节点。原因是在插入和删除函数中将head作为形参传递,只传递了head指向的地址,不管对形参如何修改,并不能改变head的值。解决方案是将head作为全局变量,并且不用head形参传输,直接对head进行修改。2、 当输入插入元素位置i小于零时,程序运行错误。原因是在GetNode()函数中没有对应i小于零的情况。解决方案是在GetNode()种添加对应i小于零的情况。3、 当删除第i(i1)个结点时,删除的是地i+1个结点。原因是在删除时是删除的查找到的元素后面的元素。解决方案是在查找时直接查找第i-1个结点,这样删除的元素便是第i个。4、 当单链表中有i个元素时,若输入欲删除结点为i+1时,程序运行错误。原因是此时查找到的元素是第i个p-=NULL,无法执行q=p-next; p-next=q-next;语句。解决方案是在p-=NULL时,直接显示“无法删除”。二、 思考题如果生成带头结点的单链表,程序应如何修改?答:修改后的程序为:#include #include /*单链表的定义*/typedef int DataType;/*DataType可以是任何相应的数据类型如int, float或char*/typedef struct node/*结点类型定义*/DataType data;/*结点的数据域*/struct node *next;/*结点的指针域*/ListNode;typedef ListNode *LinkList;/*单链表的建立,从后向前生成*/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-next;if(p=NULL)printf(单链表为空n);while(p!=NULL)printf(%d ,p-data);p=p-next;printf(n);/*单链表的查找,输入一个整数,显示该结点的位置*/LinkList LocateNode(LinkList head,DataType key)/*在带头结点的单链表head中查找其值为key的结点*/LinkList p;p=head;while(p!=NULL)if(p-data=key)break;p=p-next;if(p=NULL)printf(没有key这个值n);elseprintf(找到keyn);return p;/*单链表的查找2,在带头结点的单链表head中查找第i个结点*/LinkList GetNode(LinkList head,int i)LinkList p; int j=0;p=head;if(inext;if(p=NULL)printf(没有第i个结点n);return p;/*单链表的插入*/void InsertList(LinkList head,DataType x,int i)/*将值为x的新结点插入到带头结点的单链表head的第i个结点的位置上*/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;/*单链表的删除,删除带头结点的单链表中的第i个结点*/void DeleteList(LinkList head,int i)LinkList p,q;p=GetNode(head,i);if(head-next=NULL|p=NULL|p-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(输入要查找的值:n);scanf(%d,&key);p=LocateNode(head,key);/*单链表查找*/printf(请输入欲插入元素的位置:n);scanf(%d,&i);printf(请输入欲插入的元素:n);scanf(%d,&x);InsertList(head,x,i);/*单链表插入*/PrintList(head);/*打印单链表*/printf(请输入欲删除结点的位置:n);scanf(%d,&i);DeleteList(head,i);/*单链表删除*/PrintList(head);/*打印单链表*/三、 实验总结通过这个实验加深了我对单链表的认识,学会了简单单链表的建立,查找,插入和删除等基本运算,并对运用C语言上机调试单链表的基本方法有了初步了解。通过这个实验也使我认识到自己编程能力较差,在以后的学习中,应该加强编程方面的学习。 实验二 二叉树的建立和遍历/要求采用二叉链表作为存储结构,完成二叉树的建立,前序、中序和后序遍历的操作,求所有叶子及结点总数的操作等#include #include #include #include #define NULL 0typedef char DataType;typedef struct BinTNode DataType data; struct BinTNode *rchild,*lchild;BinTNode,*BinTree;/创建二叉数void Create(BinTree *T) char ch; if(ch = getchar() = *) /输入*时该节点为空 *T = NULL; else *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); 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 != 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;idata); DisplayPrint(T-lchild,lay+1); DisplayPrint(T-rchild,lay+1); /求结点的个数int Node(BinTree T) int static N=0; if(T) Node(T-lchild); N+; Node(T-rchild); return N;/求叶子的个数int Leaf(BinTree T) int static L=0; if(T) Leaf(T-lchild); if(!(T-lchild|T-rchild)/没有左子树和右子树,就是叶子 L+; Leaf(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(输出先序遍历:); PreOrder(T); printf(n); printf(输出中序遍历:); InOrder(T); printf(n); printf(输出后序遍历:); PostOrder(T); printf(n); printf(输出广义表表示法:); ListPrint(T); printf(n); printf(输出凹入表表示法:n); DisplayPrint(T,1); printf(结点的个数:nodes = %dn,Node(T); printf(叶子的个数:leaves = %dn,Leaf(T); Change(&T); printf(交换左右子树,并用广义表表示法:); ListPrint(T); printf(n);思考题#include#includetypedef struct BiTNodechar data; struct BiTNode *lchild,*rchild;BiTNode,*BiTree;void CreatBiTree(BiTree &T)/前序法创建二叉树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);实验三 二叉排序树的建立与查找#include #include #define NULL 0typedef int KeyType;typedef struct KeyType key;ElemType; /元素类型typedef struct BiTNode ElemType data; struct BiTNode *lchild,*rchild;BiTNode,*BiTree;BiTree find(BiTree root,KeyType key) /在二叉排序树中查找其关键字等于给定值的结点是否存在,并输出相应信息 BiTNode *p; p=root; if (p=NULL) return NULL; else if (p-data.key=key) return p; else if (keydata.key) return find(p-lchild,key); else return find(p-rchild,key);void Insert(BiTree *p,BiTree t) /在二叉排序树中插入一个新结点 if (*p=NULL) *p=t; else if(t-data.keydata.key) Insert(&(*p)-lchild),t); else if(t-data.key(*p)-data.key) Insert(&(*p)-rchild),t);void inorder(BiTree p) /中序遍历所建二叉排序树,将得到一个按关键字有序的元素序列 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);/建立一棵二叉排序树,元素值从键盘输入,直到输入关键字等于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); do /二叉排序树的查找,可多次查找,并输出查找的结果 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(); while(ch=y|ch=Y); 运行结果: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 65continue?y:nyInput the key you want to search:66unsuccesscontinue?y:nnPress any key to continue实验四 windows操作系统及应用注册表的的备份和恢复:首先用下列方法将注册表备份到C盘根目录下,并命名为MyregiestBack。然后打开注册表,细致观察注册表的结构以及存放的内容,做好观察记录。最后恢复备份的注册表。 用注册表编辑器导出和引入注册表文件 用Regedt32导出和导入注册表 在MSDOS命令行模式下导出和导入注册表文件 使用注册表检查器备份/恢复注册表 使用MS Backup工具备份/恢复Windows 98/Me/ NT/2000/XP注册表清理、优化注册表 注册表中存放了大量信息,经过长时间的使用以后,其中有些表项是多余的,所以只有清理和优化注册表才能保证系统高速稳定地运行。可以用下列方法清理、优化注册表: 重新生成整个注册表,重新建立的注册表文件往往比原来的要小很多,从而达到优化注册表的目的。 删除 “开始”菜单中“运行”的程序执行记录、系统打开各类文件的历史记录、一些常用软件各自的文件打开记录以及一些多余的窗口配色方案等。这样一类的东西都是可有可无的,删除它们并不会对系统运行造成多大的影响。 删除存储在HKEY_LASS ROOT键下一些失效的关联文件。 删除HKEY_LOCAL_MACHINEsoftware、HKEY_CURRENT_USERsoftware和HKEY_USERS.DEFAULTsoftware键下一些已卸载的残留键值。 删除一些无用的DLL等文件。 借助注册表清理软件来清理、优化注册表 六大根键的作用在注册表中,所有的数据都是通过一种树状结构以键和子键的方式组织起来,十分类似于目录结构。每个键都包含了一组特定的信息,每个键的键名都是 和它所包含的 信息相关的。如果这个键包含子键,则在注册表编辑器窗口中代表这个键的文件夹的左边将有“”符号,以表示在这个文件夹中有更多的内容。如果这个文件夹被用户打开了,那么这个“”就会变成“”。1.HKEY_USERS该根键保存了存放在本地计算机口令列表中的用户标识和密码列表。每个用户的预配置信息都存储在HKEY_USERS根键中。HKEY_USERS是远程计算机中访问的根键之一。2.HKEY_CURRENT_USER该根键包含本地工作站中存放的当前登录的用户信息,包括用户登录用户名和暂存的密码(注:此密码在输入时是隐藏的)。用户登录Windows 98时,其信息从HKEY_USERS中相应的项拷贝到HKEY_CURRENT_USER中。3.HKEY_CURRENT_CONFIG 该根键存放着定义当前用户桌面配置(如显示器等)的数据,最后使用的文档列表(MRU)和其他有关当前用户的Windows 98中文版的安装的信息。4.HKEY_CLASSES_ROOT 根据在Windows 98中文版中安装的应用程序的扩展名,该根键指明其文件类型的名称。 在第一次安装Windows 98中文版时,RTF(Rich Text format)文件与写字板(WordPad)&127;联系起来,但在以后安装了中文Word 6.0后,双击一个RTF文件时,将自动激活Word。存放在SYSTEM.DAT中的HKEY_CLASSES_ROOT,将替代WIN.INI文件中的Extensions&127;小节中的设置项,它把应用程序与文件扩展联系起来,它也替代了Windows 3.x中的Reg.dat文件中的相似的设置项。5.HKEY_LOCAL_MACHINE 该根键存放本地计算机硬件数据,此根键下的子关键字包括在SYSTEM.DAT中,用来提供HKEY_LOCAL_MACHINE所需的信息,或者在远程计算机中可访问的一组键中。该根键中的许多子键与System.ini文件中设置项类似。6.HKEY_DYN_DATA 该根键存放了系统在运行时动态数据,此数据在每次显示时都是变
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025企业租赁合同模板
- 2025苏州工业园区二手房(精装修)买卖合同
- 操作作业考试题及答案七年级
- 葡萄种植课件
- 葡萄种植与养护知识培训课件
- 2025贷款抵押用担保合同
- 萨伏伊别墅课件
- 营销课件教学课件
- 2025年高考化学试题分类汇编:化学用语阿伏加德罗常数(含解析)
- 2025-2026学年人教版八年级地理上册期末评估测试卷(含答案)
- 新能源汽车概论PPT完整全套课件
- 人教版数学五年级上册全册校本作业设计
- 沉井下沉纠偏措施
- 现代化智能仓储物流中心建设的项目解决的方案课件
- 《真空原理简介》教学课件
- 艾滋病检测筛查实验室申请表
- 文化政策与法规课件
- 社区社群团购新团长培训案例课件
- 外科学教学课件:食管癌
- 露天矿开采技术课件汇总全套ppt完整版课件最全教学教程整套课件全书电子教案
- 部编人教版九年级上册初中历史 第1课 古代埃及 教案(教学设计)
评论
0/150
提交评论