pta实验——《一般线性表的应用》答案
- 格式:docx
- 大小:62.16 KB
- 文档页数:23
pta实验——《一般线性表的应用》答案6-1 顺序表的删除操作 (8分)本题要求实现一个函数,要求将顺序表的第i个元素删掉,成功删除返回1,否则返回0;函数接口定义:int ListDelete(SqList &L,int i);其中SqList结构定义如下:typedef struct{ElemType *elem;int length;}SqList;裁判测试程序样例:#include#include#define MAXSIZE 5typedef int ElemType;typedef struct{ElemType *elem;int length;}SqList;void InitList(SqList &L);/*细节在此不表*/int ListDelete(SqList &L,int i);int main(){SqList L;InitList(L);int i;scanf("%d",&i);int result=ListDelete(L,i);if(result==0){printf("Delete Error.The value of i is illegal!");}else if(result==1){printf("Delete Success.The elements of the SequenceList L are:");for(int j=0;j<l.length;j++){< bdsfid="95" p=""></l.length;j++){<>printf(" %d",L.elem[j]);}}return0;}/* 请在这里填写答案 */输入格式:输入数据有1行,首先给出以-1结束的顺序表元素值(不超过100个,-1不属于顺序表元素),然后是删除位置。
线性表复习题答案线性表复习题答案线性表是数据结构中最基本的一种,它是由一组具有相同数据类型的元素组成的数据结构。
线性表的常见实现方式有顺序表和链表。
在学习线性表的过程中,掌握相关的复习题答案是非常重要的。
本文将针对线性表的复习题进行解答,帮助读者巩固对线性表的理解和掌握。
一、顺序表1. 什么是顺序表?顺序表的特点是什么?答:顺序表是用一段连续的存储单元依次存储数据元素的线性结构。
顺序表的特点是元素在物理位置上相邻,逻辑上也相邻。
2. 顺序表的存储结构是怎样的?答:顺序表的存储结构是一段连续的存储空间,可以使用数组来实现。
3. 如何实现顺序表的插入操作?答:顺序表的插入操作需要将插入位置后的元素依次后移,然后将待插入元素放入指定位置。
4. 如何实现顺序表的删除操作?答:顺序表的删除操作需要将删除位置后的元素依次前移,然后将最后一个元素删除。
5. 顺序表的查找操作有哪些?答:顺序表的查找操作包括按值查找和按位置查找。
按值查找是指根据给定的值在顺序表中查找对应的位置,按位置查找是指根据给定的位置获取对应的值。
二、链表1. 什么是链表?链表的特点是什么?答:链表是一种使用指针来实现的动态数据结构,它由一系列的节点组成。
链表的特点是元素在物理位置上不一定相邻,但逻辑上相邻。
2. 链表的存储结构是怎样的?答:链表的存储结构由节点组成,每个节点包含数据域和指针域。
数据域用于存储数据元素,指针域用于指向下一个节点。
3. 如何实现链表的插入操作?答:链表的插入操作需要创建新节点,并将新节点的指针域指向插入位置的后继节点,然后将插入位置的前驱节点的指针域指向新节点。
4. 如何实现链表的删除操作?答:链表的删除操作需要找到待删除节点的前驱节点,将前驱节点的指针域指向待删除节点的后继节点,然后释放待删除节点的内存空间。
5. 链表的查找操作有哪些?答:链表的查找操作包括按值查找和按位置查找。
按值查找是指根据给定的值在链表中查找对应的节点,按位置查找是指根据给定的位置获取对应的节点。
第二章线性表作业参考答案第二章线性表2.2 何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1.基于空间的考虑。
当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。
2.基于时间的考虑。
若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。
并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。
2.6 下述算法的功能是什么?LinkList Demo(LinkList L){ // L 是无头结点单链表ListNode *Q,*P;if(L&&L->next){Q=L;L=L->next;P=L;while (P->next) P=P->next;P->next=Q; Q->next=NULL;}return L;}// Demo答:该算法的功能是:将开始结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。
2.9 设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。
答:因已知顺序表L是递增有序表,所以只要从顺序表终端结点(设为i位置元素)开始向前寻找到第一个小于或等于x的元素位置i后插入该位置即可。
在寻找过程中,由于大于x的元素都应放在x之后,所以可边寻找,边后移元素,当找到第一个小于或等于x的元素位置i时,该位置也空出来了。
算法如下:#define ListSize 100 // 假定表空间大小为100typedef int DataType;//假定DataType的类型为int型typedef struct{DataType data[ListSize];// 向量data用于存放表结点int length; // 当前的表长度} Seqlist;//以上为定义表结构void InsertIncreaseList( Seqlist *L , Datatype x ){int i;if ( L->length>=ListSize)Error(“overflow");for ( i=L -> length ; i>0 && L->data[ i-1 ] > x ; i--)L->data[ i ]=L->data[ i ] ; // 比较并移动元素L->data[ i ] =x;L -> length++;}2.13 设 A和B是两个单链表,其表中元素递增有序。
一、单选题1、在长度为n的顺序表中的第i( 1 <= i <= n+1 )个位置上插入一个元素,其算法时间复杂度为()。
A.O(n*n)B.O(log2n)C.O(1)D.O(n)正确答案:D2、在长度为n的顺序表中的第i( 1 =< i <= n+1 )个位置上插入一个元素,需要移动的元素个数为()。
A.iB.n-i+1C.n-i-1D.n-i正确答案:B3、链表不具有的特点是()。
A.插入、删除不需要移动元素B.不必事先估计存储空间C.可随机访问任一元素D.所需存储空间与线性表程度成正比正确答案:C4、在一单链表中,删除指针p所指的后继结点,以下语句正确的是()。
A.p->next=p->next->next; free(p->next);B. p=p->next;C.free(p->next);p->next=p->next->next;D.s=p->next;p->next=s->next;free(s);正确答案:D5、假设删除长度为n的顺序表中的每个元素的概率相同,则删除一个元素平均要移动的元素个数是()。
A.nB.n/2C.(n-1)/2D.(n+1)/2正确答案:C6、设某顺序表中第一个元素的地址是Base,每个结点占m个单元,则第i个结点的地址为()。
A.Base+(i-1)×mB.Base+(i+1)×mC.Base-i×mD.Base+i×m正确答案:A7、长度为n的非空线性表采用顺序存储结构,在表的第i个位置插入一个数据元素,i 的合法值应该是()。
A.1≤i≤n-1B.0≤i≤n+1C.i>0D.1≤i≤n+1正确答案:D解析:一般插入位置从1开始。
8、非空单链表结点结构为【data,next】,若指针p所指结点是尾结点,则()表达式为真。
实验一线性表操作实验目的:(1)掌握在顺序、链式存储结构上实现线性表的各种基本运算。
(2)重点掌握单链表的基本操作及应用。
(3)学会综合运用C语言中函数、指针、结构体等知识进行编程。
本次实验中,下列实验项目选做一。
1、顺序表的综合操作[问题描述]设计算法,实现线性结构上的顺序表的建立以及元素的查找、插入、删除等操作。
[基本要求及提示](1)从键盘输入10个整数,建立顺序表。
(2)从键盘输入1个整数,在顺序表中查找该结点的位置。
若找到,输出结点的位置;若找不到,则显示“找不到”。
(3)从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。
(4)从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。
(5)要求程序通过一个主菜单进行控制,在主菜单界面通过选择菜单项的序号来调用各功能函数。
2、线性表的逆置[问题描述](1)以顺序存储结构实现线性表的就地逆置。
(2)以链式存储结构实现线性表的就地逆置。
注:线性表的就地逆置就是在原表的存储空间内将线性表(a1,a2,a3,…,an)逆置为(an,an-1,…,a2,a1)。
[基本要求及提示](1)从键盘输入10个整数,建立顺序表。
(2)实现顺序表逆置,并将结果输出。
(3)从键盘输入10个整数,建立链表。
(4)实现链表逆置,并将结果输出。
(5)要求程序通过一个主菜单进行控制,在主菜单界面通过选择菜单项的序号来调用各功能函数。
也可以将顺序表和链表上的操作分开,做成两个程序。
3、线性表的元素分类[问题描述]已知线性表中元素均为正整数,设计算法将其调整为前后两部分,前边均为奇数,后边均为偶数。
即实现线性表的元素的分类。
[基本要求及提示](6)从键盘输入10个整数,建立顺序表。
(7)实现顺序表上的元素分类,并输出结果。
(8)从键盘输入10个整数,建立链表。
(9)实现链表的元素分类,并输出结果。
数据结构(线性表)习题与答案数据结构(线性表)习题与答案1. 线性表的定义线性表是一种常用的数据结构,它由一系列元素组成,并且每个元素具有前驱和后继关系。
线性表可以通过顺序存储或链式存储来实现。
2. 线性表的实现方式2.1 顺序存储顺序存储是利用数组来实现线性表的一种方式。
数组的每个元素可以存储一个数据项,通过下标可以快速访问和操作其中的元素。
2.2 链式存储链式存储是通过节点之间的指针关联来实现线性表的一种方式。
每个节点包含数据域和指针域,指针域指向下一个节点。
3. 线性表的基本操作3.1 初始化线性表初始化线性表需要给表头节点分配内存空间,并将头节点的指针域置为空。
3.2 插入元素在线性表的某个位置插入元素,需要先找到插入位置的前一个节点,然后将新节点插入到该位置。
调整节点之间的指针关联即可完成插入操作。
3.3 删除元素删除线性表中的某个元素,需要找到待删除元素的前一个节点,然后将该节点的指针指向待删除节点的下一个节点,释放待删除节点的内存空间即可。
3.4 查找元素查找线性表中某个元素的位置,可以从表头节点开始逐个比较节点的数据域,直到找到目标元素或者遍历结束。
4. 线性表的习题与答案4.1 习题1已知线性表L中的元素按非递减顺序排列,设计一个算法,将元素x插入到L中,保持L的有序性。
解答:1) 从表头节点开始,顺序遍历节点的数据域,找到第一个大于等于x的节点的前一个节点,记为p。
2) 创建新的节点node,将x赋值给node的数据域。
3) 将node的指针域指向p的下一个节点。
4) 将p的指针域指向node。
5) 插入完成。
4.2 习题2已知线性表L中的元素按递减顺序排列,设计一个算法,删除L中所有大于x的元素。
解答:1) 从表头节点开始,顺序遍历节点的数据域,找到第一个小于等于x的节点的前一个节点,记为p。
2) 将p的指针域指向p的下一个节点,删除p的后继节点。
3) 重复执行步骤2,直到遍历结束。
习题二参考答案一、选择题1.链式存储结构的最大优点是( D )。
A.便于随机存取B.存储密度高C.无需预分配空间D.便于进行插入和删除操作2.假设在顺序表{a0,a1,……,a n-1}中,每一个数据元素所占的存储单元的数目为4,且第0个数据元素的存储地址为100,则第7个数据元素的存储地址是( D )。
A.106B. 107C.124D.1283.在线性表中若经常要存取第i个数据元素及其前趋,则宜采用( A )存储方式。
A.顺序表B. 带头结点的单链表C.不带头结点的单链表D. 循环单链表4.在链表中若经常要删除表中最后一个结点或在最后一个结点之后插入一个新结点,则宜采用( C )存储方式。
A.顺序表B. 用头指针标识的循环单链表C. 用尾指针标识的循环单链表D. 双向链表5.在一个单链表中的p和q两个结点之间插入一个新结点,假设新结点为S,则修改链的java语句序列是( D )。
A.s.setNext(p); q.setNext(s);B. p.setNext(s.getNext()); s.setNext(p);C. q.setNext(s.getNext()); s.setNext(p);D. p.setNext(s); s.setNext(q);6.在一个含有n个结点的有序单链表中插入一个新结点,使单链表仍然保持有序的算法的时间复杂度是( C )。
A.O(1)B. O(log2n)C. O(n)D. O(n2)7.要将一个顺序表{a0,a1,……,a n-1}中第i个数据元素a i(0≤i≤n-1)删除,需要移动( B )个数据元素。
A.iB. n-i-1C. n-iD. n-i+18.在带头结点的双向循环链表中的p结点之后插入一个新结点s,其修改链的java语句序列是( D )。
A.p.setNext(s); s.setPrior(p); p.getNext().setPrior(s);s.setNext(p.getPrior());B.p.setNext(s); p.getNext().setPrior(s); s.setPrior(p);s.setNext(p.getNext());C.s.setPrior(p); s.setNext(p.getNext()); p.setNext(s);p.getNext().setPrior(s);D.s.setNext(p.getNext()); s.setPrior(p); p.getNext().setPrior(s);p.setNext(s);9.顺序表的存储密度是( B ),而单链表的存储密度是( A )。
数据结构--线性表习题及答案第⼆章线性表⼀、选择题1、若长度为n的线性表采⽤顺序存储结构,在其第i个位置插⼊⼀个新元素算法的时间复杂度()。
A. O(log2n)B.O(1)C. O(n)D.O(n2)2、若⼀个线性表中最常⽤的操作是取第i个元素和找第i个元素的前趋元素,则采⽤()存储⽅式最节省时间。
A. 顺序表B. 单链表C. 双链表D. 单循环链表3、具有线性结构的数据结构是()。
A. 图B. 树C. ⼴义表D.栈4、在⼀个长度为n的顺序表中,在第i个元素之前插⼊⼀个新元素时,需向后移动()个元素。
A. n-iB. n-i+1C. n-i-1D. i5、⾮空的循环单链表head的尾结点p满⾜()。
A. p->next==headB. p->next==NULLC. p==NULLD. p==head6、链表不具有的特点是()。
A. 可随机访问任⼀元素B. 插⼊删除不需要移动元素C. 不必事先估计存储空间D. 所需空间与线性表长度成正⽐7、在双向循环链表中,在p指针所指的结点后插⼊⼀个指针q所指向的新结点,修改指针的操作是()。
A. p->next=q;q->prior=p;p->next->prior=q;q->next=q;B. p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;C. q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;D. q->next=p->next;q->prior=p;p->next=q;p->next=q;8、线性表采⽤链式存储时,结点的存储地址()。
A. 必须是连续的B. 必须是不连续的C. 连续与否均可D. 和头结点的存储地址相连续9、在⼀个长度为n的顺序表中删除第i个元素,需要向前移动()个元素。
线性表练习题(答案)第2章线性表一选择题下列程序段的时间复杂度为( C )。
for( int i=1;i<=n;i++)for( int j=1;j<= m; j++)A[i][j] = i*j ;A. O(m2)B. O(n2)C. O(m*n)D. (m+n)下面关于线性表的叙述中,错误的是哪一个?( B )A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
线性表是具有n个( C )的有限序列(n>0)。
A.表元素 B.字符 C.数据元素D.数据项若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( A )存储方式最节省时间。
A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。
A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( D )最节省时间。
A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用( D )存储方式最节省运算时间。
A.单链表 B.双链表 C.单循环链表D.带头结点的双循环链表链表不具有的特点是( B )A.插入、删除不需要移动元素 B.可随机访问任一元素A.O(i) B.O(1) C.O(n) D.O (i-1)循环链表H的尾结点P的特点是( A )。
A.P->next=H B.P->next= H->next C.P=H D.P=H->next完成在双循环链表结点p之后插入s的操作是( D );A.p->next=s ; s->priou=p; p->next->priou=s ; s->next=p->next;B. p->next->priou=s; p->next=s; s->priou=p; s->next=p->next;C. s->priou=p; s->next=p->next; p->next=s; p->next->priou=s ;D.s->priou=p; s->next=p->next; p->next->priou=s ; p->next=s;设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B插入结点X的操作序列为( B )。
第二章线性表一、填空题1、数据逻辑结构包括线性结构、树型结构、图型结构这三种类型,树形结构和图形结构合称为非线性结构。
2、在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有个前驱结点,最后一个结点没有后续结点,其余每个结点有且只有一个后续结点。
3、在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动的元素个数与插入或删除的位置有关。
4、在顺序表中,逻辑上相邻的元素,其物理位置一定相邻。
在单链表中,逻辑上相邻的元素,其物理位置不一定相邻。
5、在带头结点的非空单链表中,头结点的存储位置由头指针指示,首元素结点的存储位置由头结点的next域指示,除首元素结点外,其它任一元素结点的存储位置由其直接前趋结点的next域指示。
6、阅读下列算法,并补充所缺内容。
void purge_linkst( ListNode *& la ){// 从头指针为 la 的有序链表中删除所有值相同的多余元素,并释放被删结点空间ListNode *p,*q;if(la==NULL) return;q=la; p = la->link;while (p){if (p && ___(1)p->data!=q->data___) {q=p; p = p->link;}else{q->link= ___(2)p->link___;delete(p);p=___(3)q->link___;}}//while}// purge_linkst二、选择题1、在数据结构中,从逻辑上可以把数据结构分成 C。
A、动态结构和静态结构B、紧凑结构和非紧凑结构C、线性结构和非线性结构D、内部结构和外部结构2、线性表的逻辑顺序与存储顺序总是一致的,这种说法 B。
A、正确B、不正确3、线性表若采用链式存储结构时,要求内存中可用存储单元的地址D。
A、必须是连续的B、部分地址必须是连续的C、一定是不连续的D、连续或不连续都可以4、在以下的述叙中,正确的是B。
6-1 顺序表的删除操作 (8分)本题要求实现一个函数,要求将顺序表的第i个元素删掉,成功删除返回1,否则返回0;函数接口定义:int ListDelete(SqList &L,int i);其中SqList结构定义如下:typedef struct{ElemType *elem;int length;}SqList;裁判测试程序样例:#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5typedef int ElemType;typedef struct{ElemType *elem;int length;}SqList;void InitList(SqList &L);/*细节在此不表*/int ListDelete(SqList &L,int i);int main(){SqList L;InitList(L);int i;scanf("%d",&i);int result=ListDelete(L,i);if(result==0){printf("Delete Error.The value of i is illegal!");}else if(result==1){printf("Delete Success.The elements of the SequenceList L are:");for(int j=0;j<L.length;j++){printf(" %d",L.elem[j]);}}return0;}/* 请在这里填写答案 */输入格式:输入数据有1行,首先给出以-1结束的顺序表元素值(不超过100个,-1不属于顺序表元素),然后是删除位置。
所有数据之间用空格分隔。
输入样例:2 6 4 -1 1输出样例:Delete Success.The elements of the SequenceList L are: 6 4作者DS课程组单位临沂大学代码长度限制16 KB时间限制400 ms内存限制64 MB答案:int ListDelete(SqList &L,int i){if(i<1||i>L.length) return0;for(int j=i-1;j<L.length;j++) L.elem[j]=L.elem[j+1];L.length--;return1;}6-2 顺序表的查找操作 (7分)本题要求实现一个函数,要求从顺序表中查找指定元素,并返回第一个查找成功的元素在表中的位置序号,若查找失败,则返回0;函数接口定义:int LocateElem(SqList L,ElemType e);其中SqList结构定义如下:typedef struct{ElemType *elem;int length;}SqList;裁判测试程序样例:#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5typedef int ElemType;typedef struct{ElemType *elem;int length;}SqList;void InitList(SqList &L);/*细节在此不表*/int LocateElem(SqList L,ElemType e);int main(){SqList L;InitList(L);ElemType e;int p;scanf("%d",&e);p=LocateElem(L,e);printf("The position of %d in SequenceList L is %d.",e,p);return0;}/* 请在这里填写答案 */输入格式:输入数据有1行,首先给出以-1结束的顺序表元素值(不超过100个,-1不属于顺序表元素),然后是待查找的元素值。
所有数据之间用空格分隔。
输入样例:2 6 4 9 13 -1 2输出样例:The position of 2 in SequenceList L is 1.作者DS课程组单位临沂大学代码长度限制16 KB时间限制400 ms内存限制64 MB答案:int LocateElem(SqList L,ElemType e){for(int i=0;i<L.length;i++){if(L.elem[i]==e) return i+1;}return0;}6-3 顺序表的有序插入操作 (10分)本题要求实现一个函数,要求将指定元素插入到有序表的合适位置,使得插入后仍然保持有序,若插入失败返回0;插入成功则返回1,并且顺序表的长度加1.函数接口定义:int SqInsert(SqList &L,ElemType e);其中SqList结构定义如下:typedef struct{ElemType *elem;int length;}SqList;裁判测试程序样例:#include <iostream>#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5typedef int ElemType;typedef struct{ElemType *elem;int length;}SqList;void InitList(SqList &L);/*函数的实现此处不再显示*/int SqInsert(SqList &L,ElemType e);int main(){SqList L;InitList(L);ElemType e;scanf("%d",&e);int result=SqInsert(L,e);if(result==0){printf("Insertion Error.The storage space is full!");}else if(result==1){printf("Insertion Success.The elements of the SequenceList L are:");for(int j=0;j<L.length;j++){printf(" %d",L.elem[j]);}}return0;}/* 请在这里填写答案 */输入格式:输入数据有1行,首先给出以-1结束的非递减顺序表元素值(不超过100个,-1不属于顺序表元素,),然后是被插入元素值。
所有数据之间用空格分隔。
输入样例:4 8 20 -1 10输出样例:Insertion Success.The elements of the SequenceList L are: 4 8 10 20作者DS课程组单位临沂大学代码长度限制16 KB时间限制400 ms内存限制64 MB答案:int SqInsert(SqList &L,ElemType e){if(L.length==MAXSIZE) return0;if(L.length==0) L.elem[0]=e,L.length++;if(L.length==1) if(e>=L.elem[0]) L.elem[1]=e,L.length++;else L.elem[1]=L.elem[0],L.elem[0]=e,L.length++;for(int i=0;i<L.length-1;i++){if((L.elem[i]<=e&&L.elem[i+1]>=e)||(!i&&L.elem[i]>e)){if(!i&&L.elem[i]>e) i--;for(int j=L.length;j>i+1;j--) L.elem[j]=L.elem[j-1];L.elem[i+1]=e;L.length++;return1;}}L.elem[L.length++]=e;return1;}6-4 带头结点的单链表插入操作 (10分)本题要求实现带头结点的单链表插入操作,插入成功返回1,否则返回0。
函数接口定义:int insert_link ( LinkList L,int i,ElemType e);L是单链表的头指针,i为插入位置,e是插入的数据元素,插入成功返回1,否则返回0。
裁判测试程序样例:#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;LinkList Create();/* 细节在此不表 */void print( LinkList L);int insert_link ( LinkList L,int i,ElemType e);int main(){int position,insert_data;int flag;LinkList L = Create();scanf("%d",&position);scanf("%d",&insert_data);flag=insert_link(L,position,insert_data);if(flag){print(L);}else{printf("Wrong Position for Insertion");}return0;}void print(LinkList L){LinkList p;p=L->next;while (p){printf("%d ", p->data);p =p->next;}}/* 请在这里填写答案 */输入格式:输入数据为三行,第一行是若干正整数,最后以-1表示结尾(-1不算在序列内,不要处理)。
所有数据之间用空格分隔。
第二行数据是插入位置,第三行数据是被插入元素值。
输入样例:1 2 3 4 5 6 -12100输出样例:1 1002345 6作者DS课程组单位临沂大学代码长度限制16 KB时间限制400 ms内存限制64 MB答案:int insert_link ( LinkList L,int i,ElemType e){LinkList p=L->next,x,pre=L;int j=1;if(i==1){x=(LinkList)malloc(sizeof(LNode));x->data=e;pre->next=x;x->next=p;return1;}while(p){if(i==j){x=(LinkList)malloc(sizeof(LNode));x->data=e;pre->next=x;x->next=p;return1;}pre=p;p=p->next;j++;}if(i==j){x=(LinkList)malloc(sizeof(LNode));x->data=e;pre->next=x;x->next=p;return1;}return0;}6-5 带头结点的单链表删除操作 (10分)本题要求实现删除单链表的第i个元素结点,删除成功返回1,否则返回0。