欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 心得体会 > 心得体会链表

心得体会链表

时间:2017-03-06 13:44

求一篇4000字左右的关于C语言链表的学习心得

好象不是循环链表吧. pf=pb\\\/\\\/这句是看你是否真正懂了整个创建过程,pb是指像当前最新创建的结点,而pf则指向上一个结点 每次从开始循环 pb指向新创建的

职场生活之嵌入式学习心得

其实没学嵌入式之前,我也了解了一些linux C的概念和简单的C语言,也考虑的是将来想做这一块的工作,所以我才去华清远见学习了四个月,我来谈谈我的嵌入式系统学习心得。

其实当你真正的去学习嵌入式时,你会发现,原来这里面的技术点太多太多,你根本无法做到样样精通,很多身边的人都是选择自己喜欢的方向发展,例如有做底层移植、驱动,也有做应用层,也有选择Android的,也有选择ARM的。

  Linux内核是用C语言来实现的,它看似复杂,其实也只是对C的灵活运用,例如用到了结构体嵌套结构体,回调函数等等,因此学好C语言能很好的为我们以后的学习打下坚实的基础。

数据结构是笔试面试中必考的重点,但考到最多的还是链表,尤其是单链表,其中考到最多的就是单链表的倒置。

所以在学习中要加强学习。

对于网络的学习重点还是在对TCP\\\/IP的理解,以及套接字的灵活运用,进程间多种通信方式等。

而对于ARM初学者来说千万不要感觉难就放弃了,要把重点放在对整个体系结构的学习上来,对于细节性的问题自己可以在以后的工作中慢慢学习。

对于Linux内核的学习感觉主要还是对代码的阅读,当你懂得了代码的阅读技巧时你就成功了一半了,就像华清远见的张老师说过的要“观其大略”。

  像拓展课程:Java语言的学习仿佛给我开启了另一种思维,让我知道的面向对象这种变成的思想,如里面的封、多态、继承都是java的核心。

Android的学习更让我感觉就是对各种类库的灵活运用,将它们有机的组合起来就成为了我们手机上的一个个的应用程序了。

  我还是觉得不管你怎么学,重要的是掌握一种学习嵌入式的方法,例如如何去分析一个问题如何去解决,这些都将为我以后对嵌入式深入了解有很大的帮助。

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;iscore[i]); \\\/*输入成绩*\\\/ if(info->score[i]>100||info->score[i]<0) \\\/*确保成绩在0~100之间*\\\/ printf(bad data,repeat input\\\ ); \\\/*出错提示信息*\\\/ }while(info->score[i]>100||info->score[i]<0); s=s+info->score[i]; \\\/*累加各门课程成绩*\\\/ } info->sum=s; \\\/*将总分保存*\\\/ info->average=(float)s\\\/N; \\\/*求出平均值*\\\/ info->order=0; \\\/*未排序前此值为0*\\\/ info->next=h; \\\/*将头结点做为新输入结点的后继结点*\\\/ h=info; \\\/*新输入结点为新的头结点*\\\/ clrscr(); } return(h); \\\/*返回头指针*\\\/}\\\/*输入字符串,并进行长度验证*\\\/inputs(char *prompt, char *s, int count){ char p[255]; do{ printf(prompt); \\\/*显示提示信息*\\\/ scanf(%s,p); \\\/*输入字符串*\\\/ if(strlen(p)>count)printf(\\\ too long! \\\ ); \\\/*进行长度校验,超过count值重输入*\\\/ }while(strlen(p)>count); strcpy(s,p); \\\/*将输入的字符串拷贝到字符串s中*\\\/}\\\/*输出链表中结点信息*\\\/void print(STUDENT *h){ int i=0; \\\/* 统计记录条数*\\\/ STUDENT *p; \\\/*移动指针*\\\/ clrscr(); \\\/*清屏*\\\/ p=h; \\\/*初值为头指针*\\\/ printf(\\\ \\\ \\\ *********************************STUDENT************************************\\\ ); printf(|rec|nO | name | sc1| sc2| sc3| sc4| sum | ave |order|\\\ ); printf(|---|----------|---------------|----|----|----|----|--------|--------|-----|\\\ ); while(p!=NULL) \\\/*只要p不是尾结点,就输出记录*\\\/ { i++; printf(|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6.2f | %3d |\\\ , i, p->no,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,p->order); p=p->next; } printf(***********************************end**************************************\\\ ); getch(); \\\/*输入任一键返回主菜单*\\\/ clrscr(); \\\/*清屏*\\\/}\\\/*删除记录*\\\/STUDENT *delete(STUDENT *h){ STUDENT *p,*q; \\\/*p为查找到要删除的结点指针,q为其前驱指针*\\\/ char s[12]; \\\/*存放学号*\\\/ char *pass=wenwei28;char a[20],b=NULL;int i=0;clrscr();printf(Input your password:);while((i<20)&&(b!='\\\\r')){ b=getch(); \\\/*无回显输入*\\\/ if(b==8) { if(i>0) {a[--i]=NULL;

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;iscore[i]; \\\/*累加总分*\\\/ j++; \\\/*统计记录条数*\\\/ p=p->next; \\\/*指针后移*\\\/ h; \\\/*返回头指针 就知道这么多了,我不太懂咯~~~~心得就不来写了,自己写哈

~

~

用单链表做两个链表的交集和并集

\\\/*****************************************************\\\/\\\/* 3.15交集和并集的两个函数都测试可行以前写的,你看看把\\\/*****************************************************\\\/#include#includetypedef struct LNode{ int data; struct LNode *next;}LNode,*LinkedList;LinkedList LinkedListInit() { LinkedList p; p=(LinkedList)malloc(sizeof(LNode)); p->next=NULL; return p;}LinkedList LinkedListCreat(LinkedList L) { int x=0; LinkedList p,s; p=L; printf(输入链表的值,以-1结束\\\ ); scanf(%d,&x); while(x!=-1) { s=(LinkedList)malloc(sizeof(LNode)); s->data=x; p->next=s; p=s; scanf(%d,&x); } p->next=NULL; return L;}void LinkedListTrave(LinkedList L) \\\/\\\/ok{ LinkedList p; p=L->next; while(p) { printf(%d ,p->data); p=p->next; } printf(\\\ );}LinkedList LinkedListIntersection(LinkedList L1,LinkedList L2,LinkedList L3) \\\/\\\/ 求交集{ LinkedList p1,p2,p3; p1=L1->next,p2=L2->next; p3=L3; while(p1) { if(p1->data==p2->data) { p3->next=p1; p3=p1; \\\/\\\/ p3->next=NULL; p1=p1->next; p2=p2->next; } else { if(p2->next==NULL) { p2=L2; \\\/\\\/指向L2是为了对应p2=p2->next;能衔接下去 p1=p1->next; } p2=p2->next; } } if(p3==NULL) printf(NO Intersection exist\\\ ); return L3;}LinkedList LinkedListMerge(LinkedList L1,LinkedList L2,LinkedList L3) \\\/\\\/重复的数字不要,并集{ LinkedList p1,p2,p3; p1=L1->next,p2=L2->next; p3=L3; while(p1&&p2) { if(p1->data>p2->data) { p3->next=p2; p3=p2; p2=p2->next; } else if(p1->data==p2->data) { p3->next=p2; p3=p2; p2=p2->next; p1=p1->next; } else { p3->next=p1; p3=p1; p1=p1->next; } } p3->next=p1?p1:p2; return L3;}void main(){ LinkedList L1,L2,L3; L1=LinkedListInit(L1); L2=LinkedListInit(L2); L3=LinkedListInit(L3); printf(链表L1的创建\\\ ); L1=LinkedListCreat(L1); LinkedListTrave(L1); printf(链表L2的创建\\\ ); L2=LinkedListCreat(L2); LinkedListTrave(L2);\\\/\\\/ L3=LinkedListIntersection(L1,L2,L3);\\\/\\\/ LinkedListTrave(L3); L3=LinkedListMerge(L1,L2,L3); LinkedListTrave(L3);}

实验五 二叉树基本操作的编程实现实验报告

关键是:存在 对比 客观 简化 实践存在:算法中存在什么,目的是什么,怎么实现的,必要的话可以了解一下何人发明的,因为经典算法的设计者本身都是著作等身的,由此你可以通过“存在”了解一个事实:算法不是孤立的,是新和旧之间的更替。

对比:对比类似和不同算法,同在哪里,不同在哪里,以及这些差异导致了什么结果,过程有什么差异,这个过程为什么会导致那个结果。

客观:不凭空臆测,算法本身有什么思想以及借用了什么数学思想实现不能扭曲,以及何种状态适合这样的算法。

简化:当你深刻了解算法的本质(通过推导、证明和实际运用和改进),就不可避免的要把不同算法有机的结合在一起,不是线性的也不是单纯的组合,而是从内涵和外延的角度站在不同的立场把算法划分成不同的层次,每个层次什么时候运用。

简化操作往往要运用一些更加直观的快速的方法:联想。

关于联想,通常,你需要在思考线性表的时候想到一串隔开的纸带,当细化到链表还是顺序表时,需要加以限制为是否可随机存取还是顺序存取。

算法本身都可以通过数据结构表现得很清晰,这时候运用算法的时候,就可以脱离实际的ADT载体。

分类讨论以及回溯通常要结合树去分析,就一目了然。

字符串处理以及跟优先级和记忆索引等问题通常要结合栈结构去设计算法。

路径问题结合图结构设计算法。

当然,要加深对C语言算法的设计能力,需要从最根源出发:实践。

有专门的机构提供了实践平台,检验你设计的算法是否高效。

可以去搜索ACM POJ ZOJ 等关键字,找到相关的算法在线竞赛网站,从最基本的题开始训练。

另外,好的书籍是成功的一半:《算法导论》 (虽然名为导论,但是算法著作中最权威也最有深度的一本书)《数据结构(C语言)》(严蔚敏的著作,一般重点高校使用,虽然比较抽象,但比较简化)《算法与数据结构(C语言)》(电子科技出版社,对算法的实际实现讲的比较透彻)Finally,you need 'coding' and programming again and again.

下午就比赛了,大家学习pascal有什么心得吗

都是下午考试这个问题帮我下 pascal中变量说明var后面的变量值输完后在:后面什么时候输integer什么时候输real

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片