
数据结构实验课程(单链表的基本操作)
#include
H->data=0;
printf(创建头结点成功!\\\ );
} return H; } void Inition_LinkList(LinkList L,int n) \\\/*采用前插发或后插法生成链表L, 参数n为初始化数据的个数*\\\/ { 学生填写 } void display(LinkList p) { 学生填写 } LinkList Locate_LinkList( LinkList H, int x) { \\\/*在单链表中查找值为x的结点,入口参数:单链表指针,检索元素*\\\/ \\\/*出口参数:找到后返回其指针,否则返回NULL*\\\/ LinkList p=H->next; while ( p && p->data != x) p=p->next; return (p); } LinkList Locate_LinkList2( LinkList H, int i) \\\/*在单链表中查找第i个结点*\\\/ { LinkList p; int j; p=H; j=0; while (p && jnext; j++; } \\\/*while*\\\/ if ( j != i || !p) { printf(参数 i 错或单链表不存在); return (NULL); } \\\/*第i个结点不存在*\\\/ return (p); } int Insert_LinkList( LinkList H, int i, int x) 2009-4-23 11:55 回复 BradBellick 1位粉丝 2楼{ \\\/*在单链表H的第i个位置前插入值为x的结点,入口参数:单链表,插入位置,插入元素*\\\/ \\\/*返回参数:成功标志,0不成功,1成功*\\\/ LinkList p, q; p= Locate_LinkList2( H, i-1); \\\/*找第i-1个结点地址*\\\/ if (!p) { printf(插入位置有误\\\ ); return (0); } q=(LinkList) malloc(sizeof(LNode)); if (!q) { printf(申请空间失败\\\ ); return (0); } \\\/*申请空间失败,不能插入*\\\/ q->data=x; q->next=p->next; \\\/*新结点插入在第i-1个结点的后面*\\\/ p->next=q; return 1; \\\/*插入成功,则返回*\\\/ } int Del_LinkList(LinkList H,int i) { \\\/*删除单链表H上的第i个结点,入口参数:单链表,删除元素序号,返回参数:成功标志, 0不成功,1成功*\\\/ LinkList p, q; int j; if (!H->next) { printf(空表不能删除\\\ ); return (0); } p= Locate_LinkList2( H, i-1); \\\/*找第i-1个结点地址,见算法2.10*\\\/ if (!p) { printf(参数元素的位置错误
\\\ ); return (0); \\\/*第i个结点不存在不能删除*\\\/ } q=p->next; \\\/*q指向第i个结点*\\\/ p->next=q->next; \\\/*从链表中删除*\\\/ free(q); \\\/*释放*s *\\\/ return (1); } void main() { (由学生填写) } 实验用测试数据和相关结果分析:(由学生填写) 实验总结:(由学生填写)
C语言实训心得
源程序:#include stdio.h \\\/*I\\\/O函数*\\\/#include stdlib.h \\\/*其它说明*\\\/#include string.h \\\/*字符串函数*\\\/#include conio.h \\\/*屏幕操作函数*\\\/#include mem.h \\\/*内存操作函数*\\\/#include ctype.h \\\/*字符操作函数*\\\/#include alloc.h \\\/*动态地址分配函数*\\\/#include dos.h#define N 4 \\\/*定义常数*\\\/typedef struct z1 \\\/*定义数据结构*\\\/{ char no[12]; char name[20]; int score[N]; float sum; float average; int order; struct z1 *next;}STUDENT;\\\/*以下是函数原型*\\\/STUDENT *init(); \\\/*初始化函数*\\\/STUDENT *create(); \\\/*创建链表*\\\/STUDENT *delete(STUDENT *h); \\\/*删除记录*\\\/void print(STUDENT *h); \\\/* 显示所有记录*\\\/void lookup(STUDENT *h); \\\/*查找*\\\/void save(STUDENT *h); \\\/*保存*\\\/STUDENT *load(); \\\/*读入记录*\\\/void computer(STUDENT *h); \\\/*计算总分和均分*\\\/STUDENT *Modify(STUDENT *h); \\\/*修改记录*\\\/void append(); \\\/*追加记录*\\\/STUDENT *sort(STUDENT *h); \\\/*按总分排序*\\\/STUDENT *index(STUDENT *h); \\\/*按学号排序*\\\/int menu_select(); \\\/*菜单函数*\\\/\\\/******主函数开始*******\\\/main(){ int i; STUDENT *head; \\\/*链表定义头指针*\\\/ printf(\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ ); printf( * * ******* * ***** ***** * * ******* \\\ ); printf( * * * * * * * ** * * * \\\ ); printf( * * * * ******* * * * * * *** * ******* \\\ ); printf( * * * * * * * * * * * * * \\\ ); printf( * * ******* ******* ***** * *** * * * ******* \\\ ); printf(\\\ ); printf(\\\ ); printf(\\\ ); sleep(2); head=init(); \\\/*初始化链表*\\\/ clrscr(); \\\/*清屏*\\\/ for(;;) \\\/*无限循环*\\\/ { switch(menu_select()) \\\/*调用主菜单函数,返回值整数作开关语句的条件*\\\/ { \\\/*值不同,执行的函数不同,break 不能省略*\\\/ case 0:head=init();break; \\\/*执行初始化*\\\/ case 1:head=create();break; \\\/*创建链表*\\\/ case 2:print(head);break; \\\/*显示全部记录*\\\/ case 3:head=delete(head);break; \\\/*删除记录*\\\/ case 4:lookup(head);break; \\\/*按名字查找记录*\\\/ case 5:save(head);break; \\\/*保存文件*\\\/ case 6:head=load(); break; \\\/*读文件*\\\/ case 7:computer(head);break; \\\/*计算总分和均分*\\\/ case 8:head=Modify(head); break; \\\/*修改记录,一般会插在表尾*\\\/ case 9:head=sort(head);break; \\\/*按部分排序*\\\/ case 10:append();break; \\\/*追加记录*\\\/ case 11:head=index(head);break; \\\/*按学号排序*\\\/ case 12: exit(0); \\\/*如菜单返回值为14程序结束*\\\/ } }}\\\/*菜单函数,返回值为整数*\\\/menu_select(){ char *menu[]={***************MENU***************, \\\/*定义菜单字符串数组*\\\/ 00. init list, \\\/*初始化*\\\/ 01. Enter list, \\\/*输入记录*\\\/ 02. print list , \\\/*显示单链表中所有记录*\\\/ 03. Delete a record from list, \\\/*从表中删除记录*\\\/ 04. Search record on name, \\\/*按照姓名查找记录*\\\/ 05. Save the file, \\\/*将单链表中记录保存到文件中*\\\/ 06. Load the file, \\\/*从文件中读入记录*\\\/ 07. compute the score, \\\/*计算所有学生的总分和均分*\\\/ 08. Modify an information , \\\/*修改某学号的信息*\\\/ 09. sort to make new file, \\\/*排序*\\\/ 10. append record to file, \\\/*追加记录到文件中*\\\/ 11. index on nomber, \\\/*按学号排序*\\\/ 12. Quit}; \\\/*退出*\\\/ char s[3]; \\\/*以字符形式保存选择号*\\\/ int c,i; \\\/*定义整形变量*\\\/ gotoxy(1,1); \\\/*移动光标*\\\/ textcolor(YELLOW); \\\/*设置文本显示颜色为黄色*\\\/ textbackground(BLUE); \\\/*设置背景颜色为蓝色*\\\/ gotoxy(10,2); \\\/*移动光标*\\\/ putch(0xc9); \\\/*输出左上角边框┏*\\\/ for(i=1;i<44;i++) putch(0xcd); \\\/*输出上边框水平线*\\\/ putch(0xbb); \\\/*输出右上角边框 ┓*\\\/ for(i=3;i<20;i++) { gotoxy(10,i);putch(0xba); \\\/*输出左垂直线*\\\/ gotoxy(54,i);putch(0xba); } \\\/*输出右垂直线*\\\/ gotoxy(10,20);putch(0xc8); \\\/*输出左上角边框┗*\\\/ for(i=1;i<44;i++) putch(0xcd); \\\/*输出下边框水平线*\\\/ putch(0xbc); \\\/*输出右下角边框┛*\\\/ window(11,3,53,19); \\\/* 制作显示菜单的窗口,大小根据菜单条数设计*\\\/ clrscr(); \\\/*清屏*\\\/ for(i=0;i<16;i++) \\\/*输出主菜单数组*\\\/ { gotoxy(10,i+1); cprintf(%s,menu[i]); } textbackground(BLACK); \\\/*设置背景颜色为黑色*\\\/ window(1,1,80,25); \\\/*恢复原窗口大小*\\\/ gotoxy(10,21); \\\/*移动光标*\\\/ do{printf(\\\ make by wenwei);
printf(\\\ Enter you choice(0~13):); \\\/*在菜单窗口外显示提示信息*\\\/
scanf(%s,s); \\\/*输入选择项*\\\/
c=atoi(s); \\\/*将输入的字符串转化为整形数*\\\/
}while(c<0||c>14); \\\/*选择项不在0~14之间重输*\\\/ return c; \\\/*返回选择项,主程序根据该数调用相应的函数*\\\/}STUDENT *init(){ clrscr(); return NULL;}\\\/*创建链表*\\\/STUDENT *create(){ int i; int s; STUDENT *h=NULL,*info; \\\/* STUDENT指向结构体的指针*\\\/ clrscr(); for(;;) { info=(STUDENT *)malloc(sizeof(STUDENT)); \\\/*申请空间*\\\/ if(!info) \\\/*如果指针info为空*\\\/ { printf(\\\ out of memory); \\\/*输出内存溢出*\\\/ return NULL; \\\/*返回空指针*\\\/ } inputs(enter no:,info->no,11); \\\/*输入学号并校验*\\\/ if(info->no[0]=='@') { clrscr();break; } \\\/*如果学号首字符为@则结束输入,清屏后返回*\\\/ inputs(enter name:,info->name,15); \\\/*输入姓名,并进行校验*\\\/ printf(please input %d score \\\ ,N); \\\/*提示开始输入成绩*\\\/ s=0; \\\/*计算每个学生的总分,初值为0*\\\/ for(i=0;i
putchar(8); \\\/*退格键*\\\/
putchar(' '); \\\/*以空格代替*\\\/
putchar(8);
} else putchar(7); \\\/*没有任何字符的退格,响铃警告*\\\/ } else if(b!='\\\\r') { a[i++]=b; \\\/*只要不是退格和回车就接受*\\\/ putchar('*'); } else {a[i]=NULL; break; \\\/*密码输入完了,记得加个NULL到后面*\\\/
}} if(strcmp(a,pass)!=0){clrscr();
printf(Password is mistake Tow seconds to return!);
sleep(2);clrscr();return h;
} else {printf(Password is OK! Welcome to come!); sleep(3);
} clrscr(); \\\/*清屏*\\\/ printf(please deleted no\\\ ); \\\/*显示提示信息*\\\/ scanf(%s,s); \\\/*输入要删除记录的学号*\\\/ q=p=h; \\\/*给q和p赋初值头指针*\\\/ while(strcmp(p->no,s)&&p!=NULL) \\\/*当记录的学号不是要找的,或指针不为空时*\\\/ { q=p; \\\/*将p指针值赋给q作为p的前驱指针*\\\/ p=p->next; \\\/*将p指针指向下一条记录*\\\/ } if(p==NULL) \\\/*如果p为空,说明链表中没有该结点*\\\/ { printf(\\\ list no %s student\\\ ,s);sleep(2);clrscr();return h;} else \\\/*p不为空,显示找到的记录信息*\\\/ { printf(*********************************have found********************************\\\ ); printf(|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\\\ ); printf(|------------|---------------|----|----|----|----|--------|--------|-----|\\\ ); printf(|%-12s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6-5.2f | %3d |\\\ , p->no, p->name,p->score[0],p->score[1],p->score[ q=p; \\\/*保存当前结点的指针,作为下一结点的前驱*\\\/ p=p->next; \\\/*指针后移,新读入数据链到当前表尾*\\\/ } q->next=NULL; \\\/*最后一个结点的后继指针为空*\\\/ fclose(fp); \\\/*关闭文件*\\\/ printf(---You have success read data from file!!!---\\\ ); getch(); \\\/*按任意键返回主菜单*\\\/ clrscr(); return h; \\\/*返回头指针*\\\/}\\\/*成绩统计*\\\/void computer(STUDENT *h){ STUDENT *p,*t,*q; \\\/*定义移动指针*\\\/ float saverage[N]={0}; \\\/*均分初值为0*\\\/ int i; clrscr(); for (i=0;i
~
~
实验五 二叉树基本操作的编程实现实验报告
for(i=1;i<=5;i++) \\\/\\\/ <= 吧 { if(i == 1) \\\/\\\/你写成赋值了 x='A'; else if(i == 2) x='B'; else if(i == 3) x='C'; else if(i == 4) x='D'; else if (i == 5) x='E'; insert(l,x,i); \\\/\\\/ 滞空 然后依次插入 是不是应该写在循环里 }
多项式加法链表实现的实验报告怎么写
一, 程序功能本程序利用指针,链表,文件,以及字符串等各种操作,实现程序功能:字典管理。
二, 题目分析与前两题不同,本题需大量利用指针和链表操作。
这无形中增加了题目的难度。
由于指针这部分知识掌握得不牢固,加上链表和文件都是新学的内容,编程过程遇到了一些困难,调试与查错一度成为课设的主要工作。
为了更好的完成设计,我复习了指针这部分内容,巩固了链表和文件两部分知识。
在完成课设过程中,我发现困扰我的地方不是编写插入,删除,查找这些函数,而是建立初始链表。
我首先编了三个函数:creat,insert_a_word,list,和一个main函数。
调试时发现调用list函数输出除了原来insert的字符串,还有一些乱码,这就说明以上三个函数的某个或几个有问题。
后来我把目标放在creat函数上。
我本来是想模仿书上的creat 函数,但是要从文件上读取字符串,就要用到fscanf,由于操作的不纯熟,空间的分配出现了问题,在初始链表的时候带进了一些乱码。
后来我重新编了creat函数,解决了这个问题。
解决了初始链表的问题以后,遇到的问题无非是指针上的操作错误,往往一编译就出现很多警告和错误,于是一个一个找,一个一个调。
这些花费了我很长时间,以至于一看到蓝屏下的出错信息就想逃。
这些错误后来都被我解决了。
在完成课设过程中,我是一边出错一边改错,一边调试一边翻书,进展缓慢。
不过也是因为出了错,翻了书,我发现了自己知识体系中的不足之处,巩固了薄弱的地方。
大体编完了以后,我又对程序进行了完善。
比如说增加了全局变量n,在输出插入单词成功时输出插入单词的个数。
经过这个程序设计的编写,我觉得作为一个编程者,首先,必须有严谨的作风:因为一个程序中小小的一点不足在最后的运行时都会对整个程序产生不可忽视的影响,甚至使程序终止,不能运行下去;其次,还必须有足够的耐心去观察解决出现的一系列问题;当然,还必须有较强的逻辑思维能力,因为程序出现错误不是光有耐心就能解决的,必须利用逻辑思维能力,一步步地排除错误三、源程序或者;一. 程序功能设计一个单向链表类,完成一个通讯录的简单管理工作。
通讯录是一个简单的数据库库表,每个结点包含一个人的所有通讯信息。
程序的执行过程为:循环显示主菜单,用户在Choice处输入选项,即按照功能列表输入1-9的任意一个数字,按回车后,执行响应的功能。
各菜单项功能如下:1、 Add Record (增加记录)提示输入各字段。
一次输入一个人的数据。
2、 Delete Record (删除记录)输入待删除记录的姓名,显示该姓名下的所有信息,让用户再次确认是否要删除3、 Display All Record(显示所有记录)按顺序显示库中所有记录,每屏显示10条记录。
每显示10条,用户按
4、 Query(按姓名查找并显示一个记录)输入姓名,显示该姓名下的所有信息5、 Modify Record(按姓名查找,修改一个记录)输入姓名,显示该姓名下的所有信息。
然后,在子菜单中提示修改哪个数据。
6、 Add from a Text File(从正文文件中添加数据到库表中)用户可事前建立一个正文文件,存放待加入的数据,然后从该文件中一次性导入多个人员的数据。
程序运行时,提示输入正文文件的文件名。
7、 Write to a Text File将库表中的数据写入一个正文文件中。
8、 Sort(排序库表)首先显示当前排序关键字,然后 提示是否需要改变,用户根据需要回答是否需要改变。
系统中有两种排序方式,一种是按姓名排序,一种是按办公室电话排序。
改变排序的方式的意义是在两种排序方式之间的切换。
9、 Quit(退出系统)二. 添加的一些功能1.程序设计过程中我添加了报错系统,例如我定义了int isnumber(char a[])和int ischar(char a[])2个函数,分别用于判断用户输入的字符串是否为数字或非数字字符串。
2.我还添加了清屏功能,在适当的地方添加此功能可以方便用户使用。
3.在void add(Addrlist &addrlist)函数中我还添加了提示“已经添加同名联系人,是否需要修改新联系人的各项记录?(y\\\/n)并确认”的功能。
4.在void del(Addrlist &addrlist)函数中我添加了确认2次输入的待删除姓名一致的功能,而且提示用户确认删除。
5.在void modify(Addrlist &addrlist)函数中我还添加了可以一次修改多个信息,可以随时返回的功能,更方便用户使用。
6.在void addfromtxtfile(Addrlist &addrlist)函数中,导入数据时系统显示重名信息并自动过滤重名信息。
三.程序设计过程中的一些感想刚开始接到设计题目的时候感觉很是幸运,因为我知道强化班他们也学过C++,而且也做过课程设计。
他们的题目是要做一个图书馆的管理系统,那可是很艰巨的任务呀
大家选择比较多的应该是我的这个通讯录了,一看好多函数书上都有,就算是我最头疼的链表书上也有详细的过程。
好象事情从来就是想起来容易做起来难,当我开始要做这个课程设计的时候,我竟然不知道如何下手。
也可能是人天生的惰性在起作用,一开始我确实想找强化班的兄弟帮我设计一下,毕竟他们有经验,可以帮我开个好头。
后来还是决定自己来做,虽然做得可能会稍微差一点。
既然学习了就应该自己去实现。
在做的过程中遇到了很多麻烦,虽然我早有心理准备,但还是令我伤透了脑筋。
只怪自己平时看书太少,其实有很多东西在书上都可以找到答案的。
可是还是有一些问题我实在没有办法解决。
我开始只是想自己做一套程序,这会让我有一种自豪感,没想到到了最后时期,仍然有些问题没有解决。
只好求助同学。
在同学的帮助之下,总算是解决了最后的问题。
但由于水平有限,和其他同学比起来,我的程序显得那么笨拙。
通过这次的课程设计使我更深刻地体会到事情从来都不像你想象的那么简单,只有去做,才会真正感到它的困难。
同时也使我明白了,什么时候都不要忘记最基础的东西。
因为平时没有注意看书,使我在设计的过程中吃尽了苦头,浪费了不少时间。
虽然一开始雄心勃勃要自己独立完成程序,可是最后还是要求助于别人。
这与最开始的想法有些违背。
有的时候的确不应该自己钻牛角尖,每个同学都可以成为自己的老师,虚心请教是必不可少的。
三、源程序



