江苏省二级(C语言)考试真题重点题型分类总结.ppt
《江苏省二级(C语言)考试真题重点题型分类总结.ppt》由会员分享,可在线阅读,更多相关《江苏省二级(C语言)考试真题重点题型分类总结.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、结束第 1 页结束第 2 页真题汇总小结真题汇总小结省二级考试省二级考试C C语言真题重点题型分类语言真题重点题型分类 一、线性表建立、删除、插入一、线性表建立、删除、插入 二、文件操作文件翻开、读、写二、文件操作文件翻开、读、写 三、递归问题三、递归问题 四、字符串操作问题四、字符串操作问题 五、变量作用域与静态变量问题五、变量作用域与静态变量问题 六、数列或数字处理问题六、数列或数字处理问题 七、排序问题七、排序问题 八、上机试题八、上机试题结束第 3 页 线性表是线性表是n 个数据元素的有限序列。个数据元素的有限序列。通常记作通常记作a1,a2,a3,an。姓名电话号码蔡颖6321444
2、4陈红63217777刘建平63216666王小林63218888张力63215555.一、线一、线 性性 表表例1、数学中的数列11,13,15,17,19,21例2、英文字母表A,B,C,D,EZ。例3、某单位的号码簿。一一 线性表的逻辑结构线性表的逻辑结构号码簿是数据元素的有限序列,每一数据元素包括两个数据项,一个是用户姓名,一个是对应的号码。结束第 4 页说明:设A=a1,a2,.,ai-1,ai,ai+1,an是一线性表1均匀性:线性表的数据元素可以是各种各样的,但同一线性表中的元素必须是同一类型的;2相邻性:每个元素至少有一个元素与之相邻。在表中ai-1领先于ai,ai领先于ai+
3、1,称ai-1是ai的直接前趋,ai+1是ai的直接后继;a1,无前驱,an无后继。3有限性:线性表中元素的个数n称为线性表的长度,n=0时称为空表4有序性:ai是线性表的第i个元素,称i为数据元素ai的序号,每一个元素在线性表中的位置,仅取决于它的序号;二线性表根据其存储结构不同可分为:链式存储结构的链表顺序存储结构的顺序表结束第 5 页一一 线性链表的概念线性链表的概念1线性链表1、线性链表线性链表a a4 4a a3 3a a1 1a a2 2 0101010241014101010121014101610181020102210241026用一组任意的存储单元存储线性表中的数据元素,对
4、每个数据元素除了保存自身信息外,还保存了直接后继元素的存储位置。用线性链表存储线性表时,数据元素之间的关系 是通过保存直接后继元素的存储位置来表示的结束第 6 页线性链表图示ai-1aia2a1ai+1nan用线性链表存储线性表时,数据元素之间的关系 是通过保存直接后继元素的存储位置来表示的2线性链表图示一般来说,我们并不需要写出直接后继的实际地址,为直观起见,通常用如下所示的图表示链表,其中,箭头表示相应单元中保存的是它所指向结点的存储地址。headhead是头指针是头指针headhead结束第 7 页结点:数据元素及直接后继的存储位置地址组成一个数据元素的存结点:数据元素及直接后继的存储位
5、置地址组成一个数据元素的存储结构,称为一个结点;储结构,称为一个结点;结点的数据域结点的数据域:结点中用于保存数据元素的局部:结点中用于保存数据元素的局部;结点的指针域结点的指针域:结点中用于保存数据元素直接后继存储地址的局部:结点中用于保存数据元素直接后继存储地址的局部;3 线性链表有关术语线性链表有关术语存储数据元素存储数据元素存储后继结点存储后继结点 存储地址存储地址结点结点数据域数据域指针域指针域结束第 8 页头指针:头指针:用于存放线性链表中第一个结点的存储地址存储地址;空指针:空指针:不指向任何结点,线性链表最后一个结点的指针通常是空指针,空指针一般用NULL表示;头结点:头结点:
6、线性链表的第一元素结点前面的一个附加结点,称为头结点;带头结点的线性链表带头结点的线性链表:第一元素结点前面增加一个附加结点的线性链表称为带头结点的线性链表;带头结点的线性链表图示headhead是头指是头指针针ai-1aia2a1ai+1nan 头结点头结点 空指针空指针headhead结束第 9 页线性链表的每个结点中只有一个指针域故也称为单链表单链表ai-1aia2a1ai+1nanheadhead是头指针是头指针headhead注:从以往二级考试来看都是用没有附加头结点的链表,如下图结束第 10 页结点变量图示structnodeintx;structnode*next;;node:结
7、构体类型名;node类型结构变量有两个域:x:用于存放线性表的数据元素,next:用于存放元素直接后继结点的地址;该类型结构变量用于表示线性链表中的一个结点;h和head:指向结构体结点的指针变量,用于存放node类型结构变量的地址;数据域数据域指针域指针域 x next node类型结构变量h h结构体结点指针变量h4线性链表的结点类型定义及指向结点的指针类型定义structnode*h;或structnode*head;结构体指针变量定义结构体类型定义结束第 11 页常用的引用格式常用的引用格式(一般格式一般格式):指针变量名指针变量名-结构体成员名结构体成员名如:如:h-x=10;h=h
8、-next;注意:在引用过程中,数据类型还是成员的数据类型。如:h-x为成员x的数据类型即整形5怎样利用结构体指针变量来引用结构体成员structnode*h;或structnode*head;不常用引用格式:不常用引用格式:*指针变量名指针变量名.结构体成结构体成员名员名如:如:(*h).x=10;*h=(*h).next;结束第 12 页设head是指向链表第一个结点的指针变量,head用来保存线性链表中第一个结点的地址。ai-1aia2a1ai+1nanheadheadHead指向的链表二线性链表根本操作的算法假设线性表用不带头结点的线性链表head的存储。下面讨论在这种存储方式下,线性
9、表各种根本操作的算法。当线性表用线性链表存储时,对线性表各种根本操作实际上就是对存储在内存中的线性链表进行操作。结束第 13 页如何在线性链表如何在线性链表head上实现线性表的根本操作?上实现线性表的根本操作?如何建空表?如何插入?删除?如何建空表?如何插入?删除?结束第 14 页1取元素操作从链表中找到与输入的值m相等的元素功能:1、将线性链表中第i个元素赋值给e2、从链表中找到与输入的值m相等的元素,并将其指针返回取元素操作主要步骤:1查找链表的第i个元素结点;2)将第i个元素结点中的数据元素赋值给e;或将其指针返回;取元素元素操作图示ai-1aia2a1ai+1nanheadheadp
10、1p1p p注:p、p1为工作指针结束第 15 页2插入操作功能:在线性链表head的第i个元素结点之前插入一个新元素结点;插入操作图示:插入前插入后ai-1aia2a1ai+1nanheadheadai-1aia2a1ai+1naneheadhead结束第 16 页插入操作主要步骤:1查找链表L的第i-1个元素结点;2为新元素建立结点;3修改第i-1个元素结点的指针和新元素结点指针完成插入;结束第 17 页3删除操作功能:在线性链表L中删除第i个元素,并且用e返回其值删除操作图示:删除前删除后ai-1aia2a1ai+1nanheadheadai-1aia2a1ai+1nanheadhead
11、结束第 18 页删除操作主要步骤:1查找链表的第i-1个元素结点;2修改第i-1个元素结点指针,删除第i个元素结点;3)将第i个元素结点中的数据元素赋值给e;4回收被删除结点空间;用free(指针变量)函数释放删除结点的空间结束第 19 页4线性链表归并操作图示131n542n6papb归并31n6papcpb524结束第 20 页以前考过的线性链表的题目以前考过的线性链表的题目lP10 13题即题即2000年秋的填空题中的年秋的填空题中的13题题此题是链表归并问题:此题是链表归并问题:首先要搞清楚每个指针的用途。如首先要搞清楚每个指针的用途。如pt指针变量就指针变量就是用来指向建立的新结点。
12、是用来指向建立的新结点。结束第 21 页P10 13题即题即2000年秋的填空题中的年秋的填空题中的13题题PNODE *paddPNODE *pa,PNODE*pb)PNODE*pcr,*pt,*pc;pc=NULL;while(23)if(pa-y=pb-y)pt=(24)malloc(sizeof(PNODE);pt-x=pa-x+pb-x;pt-y=pa-y;pt-next=NULL;if(pc=NULL)pc=pcr=pt;else pcr-next=pt;(25);pa=pa-next;pb=pb-next;else if(26)pb=pb-next;else pa=pa-next
13、;Return pc;本空显然是控制结束的,只有当pa、pb两个链表中都没有元素时才会结束分配的空间类型判断papb中当前元素y成员的值谁大将新增的结点连到工作指针pcr上结束第 22 页P10 13题答案题答案PNODE *paddPNODE *pa,PNODE*pb)PNODE*pcr,*pt,*pc;pc=NULL;while(23)if(pa-y=pb-y)pt=(24)malloc(sizeof(PNODE);pt-x=pa-x+pb-x;pt-y=pa-y;pt-next=NULL;if(pc=NULL)pc=pcr=pt;else pcr-next=pt;(25);pa=pa-n
14、ext;pb=pb-next;else if(26)pb=pb-next;else pa=pa-next;Return pc;pa&pbPNODE*pa-ypb-ypcr=pt结束第 23 页P21 14题即题即2001年春的填空题中的年春的填空题中的14题题PNODE *paddPNODE *pa)PNODE*p1,*p2,*p;p1=p2=pa;while(p1)if(p1-x%2=0&(27)p=p1;p1=p1-next;(28)=p1;P-next=pa;(29)else p2=p1;p1=p1-next;Main()PNODE a10=1,2,3,4,5,6,7,8,9,10,*h
15、a=a,*p;int i;for(i=0;i,p-x);p=p-next;链表结尾的指针NULL如果p1指向的结点就是第一个结点,那么不用移本行是从链表中删除结点将p指向的结点插到链表的头部没找着偶数值结点时,指针向后移,P2一直在P1的前一个结点结束第 24 页P21 14题答案题答案PNODE *paddPNODE *pa)PNODE*p1,*p2,*p;p1=p2=pa;while(p1)if(p1-x%2=0&(27)p=p1;p1=p1-next;(28)=p1;P-next=pa;(29)else p2=p1;p1=p1-next;Main()PNODE a10=1,2,3,4,5
16、,6,7,8,9,10,*ha=a,*p;int i;for(i=0;i,p-x);p=p-next;NULLp1!=pap2-next=p1pa=p结束第 25 页P31 14题即题即2001年秋的填空题中的年秋的填空题中的14题题Struct node *deladdstruct node *h,int value)struct node *p1,*p2;int flage=0;p1=p2=h;while(p1&flage=0)if(p1-x=value)flage=1;if(p1=h)h=(27);free(p1);else p2-next=(28);free(p1);else p2=p
17、1;p1=(29);If(flage=0)p1=(struct node*)malloc(sizeof(struct node);p1-x=value;p1-next=0;if(h=0)h=p1;else (30);链表结束或找到结点不执行循环Flage是一个标志变量用来标志是否找到结点如果找到符合每件的结点,就删除结点如果没找到适合每件的结点,那么指针后移如果没找到结点构造一个新结点如果链表为空就直接将构造的结点作为链表的第一个结点,否那么将其插入到链表最后结束第 26 页P31 14题答案题答案Struct node *deladdstruct node *h,int value)stru
18、ct node *p1,*p2;int flage=0;p1=p2=h;while(p1&flage=0)if(p1-x=value)flage=1;if(p1=h)h=(27);free(p1);else p2-next=(28);free(p1);else p2=p1;p1=(29);If(flage=0)p1=(struct node*)malloc(sizeof(struct node);p1-x=value;p1-next=0;if(h=0)h=p1;else (30);p1-nextp1-nextp1-nextp2-next=p1结束第 27 页P42 14题即题即2002年春的填
19、空题中的年春的填空题中的14题题 (27)createint n)struct node *p,*p1,*p2,*h=NULL;int i=0;if(nx);p-next=NULL;if(h=NULL)(29);else p1=p2=h;while(p2&p-x=p2-x)p1=p2;p2=p2-next;if(p2=h)(30);h=p;else p-next=p2;p1-next=p;i+;Return h;函数返回值类型如果找到的插入位置是第一个结点创立结点个数的控制如果链表为空,直接插入结点作为首结点如果找到的插入位置不是第一个结点就在找到的位置插入结束第 28 页P42 14题答案题
20、答案 (27)createint n)struct node *p,*p1,*p2,*h=NULL;int i=0;if(nx);p-next=NULL;if(h=NULL)(29);else p1=p2=h;while(p2&p-x=p2-x)p1=p2;p2=p2-next;if(p2=h)(30);h=p;else p-next=p2;p1-next=p;i+;Return h;structnode*p-next=p2inext=NULL)return head;if(dir=0)while(p1-next)p2=p1;p1=p1-next;(23)=NULL;p1-next=(24);
21、head=p1;else head=(25);p2=head;while(p2-next)p2=p2-next;(26);p1-next=NULL;return head;右移一次如果是空链表或只有一个结点的链表左移一次找到最后一个结点使得p1指向最后一个结点P2指向倒数第二个结点将最后一个结点p1指向的移到链表头找到最后一个结点P2指向最后一个结点结束第 30 页P51 14题答案题答案Struct node *loopstruct node *head,int dir)struct node *p1,*p2;p1=head;if(p1=NULL|p1-next=NULL)return he
22、ad;if(dir=0)while(p1-next)p2=p1;p1=p1-next;(23)=NULL;p1-next=(24);head=p1;else head=(25);p2=head;while(p2-next)p2=p2-next;(26);p1-next=NULL;return head;p1-nextp2-nextheadp2-next=p1结束第 31 页P60 14题即题即2003年春的填空题中的年春的填空题中的14题题Struct node *find_delstruct node *head,int *pm)struct node *p1,*p2,*pmax,*pre;
23、if(head=NULL)return NULL;pmax=(23);p2=p1=pmax;while(p1)if(p1-x (24)pre=p2;pmax=p1;p2=p1;p1=p1-next;if(pmax=head)head=pmax-next;else (25)=pmax-next;(26)=pmax;Return head;如果是空链表就结束函数,并返回空指针首先认为第一个结点是x值最大的结点Pmax始终指向当前x值最大的结点P1为工作指针活动指针如果首结点的x值最大就删除首结点删除pmax指向的结点将x值最大的结点地址保存到pm指向指向的指针变量中结束第 32 页P60 14题即
24、题即2003年春的填空题中的年春的填空题中的14题题Struct node *find_delstruct node *head,int *pm)struct node *p1,*p2,*pmax,*pre;if(head=NULL)return NULL;pmax=(23);p2=p1=pmax;while(p1)if(p1-x (24)pre=p2;pmax=p1;p2=p1;p1=p1-next;if(pmax=head)head=pmax-next;else (25)=pmax-next;(26)=pmax;Return head;headpmax-xpre-next*pm结束第 33
25、 页c 2.2 2.2 线性表的顺序表示和实现线性表的顺序表示和实现 一一 线性表的顺序存储结构线性表的顺序存储结构顺序表顺序表 1 1 线性表的顺序存储结构线性表的顺序存储结构 2 2 顺序表的类型定义顺序表的类型定义 二二 顺序表的根本操作算法顺序表的根本操作算法 三三 利用根本操作实现线性表的其他操作利用根本操作实现线性表的其他操作2、顺序链表、顺序链表2、顺序链表、顺序链表结束第 34 页为了存储线性表,至少要保存两类信息:1线性表中的数据元素;2线性表中数据元素的顺序关系;在计算机内部可以采用不同的方式来存储一个线性表,其中最简单的方式就是本节要讲的线性表的顺序存储结构。结束第 35
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 江苏省 二级 语言 考试 重点 题型 分类 总结
限制150内