数据结构练习1-12章(答案)
- 格式:doc
- 大小:92.50 KB
- 文档页数:13
第1章绪论教材中练习题及参考答案1. 简述数据与数据元素的关系与区别。
答:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。
数据元素是数据的基本单位,是数据的个体。
数据元素与数据之间的关系是元素与集合之间的关系。
2. 采用二元组表示的数据逻辑结构S=<D,R>,其中D={a,b,…,i},R={r},r={<a,b>,<a,c>,<c,d>,<c,f>,<f,h>,<d,e>,<f,g>,<h,i>},问关系r是什么类型的逻辑结构?哪些结点是开始结点,哪些结点是终端结点?答:该逻辑结构为树形结构,其中a结点没有前驱结点,它是开始结点,b、e、i和g、结点没有后继结点,它们都是终端结点。
3. 简述数据逻辑结构与存储结构的关系。
答:在数据结构中,逻辑结构与计算机无关,存储结构是数据元素之间的逻辑关系在计算机中的表示。
存储结构不仅将逻辑结构中所有数据元素存储到计算机内存中,而且还要在内存中存储各数据元素间的逻辑关系。
通常情况下,一种逻辑结构可以有多种存储结构,例如,线性结构可以采用顺序存储结构或链式存储结构表示。
4. 简述数据结构中运算描述和运算实现的异同。
答:运算描述是指逻辑结构施加的操作,而运算实现是指一个完成该运算功能的算法。
它们的相同点是,运算描述和运算实现都能完成对数据的“处理”或某种特定的操作。
不同点是,运算描述只是描述处理功能,不包括处理步骤和方法,而运算实现的核心则是设计处理步骤。
5. 数据结构和数据类型有什么区别?答:数据结构是相互之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面的内容,即数据的逻辑结构、存储结构和数据的运算。
而数据类型是一个值的集合和定义在这个值集上的一组运算的总称,如C语言中的short int数据类型是由-32768~32767(16位机)的整数和+、-、*、/、%等运算符构成。
数据结构2009年习题参考答案教材数据结构(c语言版)第一版作者李云清等第一章概论概念题从略1.10(1)O(1) (2)O(n) (3)O(n2)第二章线性表的顺序存储2.2int number_of_x_sequence_list(sequence_list slt,datatype x){int i,n=0;if(!slt.size) {printf("顺序表是空的!");exit(1);}elsefor(i=0;i<slt.size;i++)if(slt.a[i]==x) n++;return n;}2.3void inversion_sequence_list(sequence_list *slt){int i,temp;if(!slt->size) {printf("顺序表是空的!");exit(1);}elsefor(i=0;i<slt->size/2;i++){temp=slt->a[i];slt->a[i]=slt->a[slt->size-i-1];slt->a[slt->size-i-1]=temp;}}2.4void insert_order_sequence_list(sequence_list *slt,datatype x){int i=0;if(slt->size==MAXSIZE){printf("\n顺序表是满的!没法插入!");exit(1);}i=find_num_sequence_list(slt,x);insert_pos_sequence_list(slt,i,x);}2.6当rear>=front 时,循环队列的元素个数是rear-fornt当rear<front 时,循环队列的元素个数是n+rear-front-1综合起来:(n+rear-front)%n2.71234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321 共14种归纳起来有两种方法算具体的排序种类:(1)bn=1/(n+1)*2n!/(n!*n!)(2)递推公式:F(n)=F(0)*F(n-1)+F(1)*F(n-2)+F(2)*F(n-3)+…+F(n-1)*F(n-n);(其中n>=1,F(0)=1)具体的完成实现程序如下:#include <stdio.h>int stk[21],out[21];void go(int n,int intop,int outtop,int in){int i,t;if(intop==0 && outtop==n){for(i=0;i<n;i++){printf("%d",out[i]);if(i==n-1) printf("\n");}return;}if(intop<n && in<n){stk[intop]=in+1;go(n,intop+1,outtop,in+1);}if(intop>0){out[outtop]=stk[intop-1];t=stk[intop-1];go(n,intop-1,outtop+1,in);stk[intop-1]=t;}}main(){int n;printf("please input n:\n");scanf("%d",&n);go(n,0,0,0);getch();}第三章线性表的链式存储3.1int cal_link_list(node *head){int i=0;node *q=head;while(q) {i++;q=q->next;}printf("\nThis list a total %d of nodes",i); return i;}3.3node *insert_x_before_y(node *head,int x,int y) {node *m,*n,*t;m=head;while(m&&m->info!=y){n=m;m=m->next;}t=(node *)malloc(sizeof(node));t->info=x;t->next=m;n->next=t;return head;}3.4int judgement(node *head){node *p=head;if(p&&p->info>=p->next->info){while(p&&p->info>=p->next->info){p=p->next;}}else{while(p&&p->info<p->next->info){p=p->next;}}if(p->next){printf("\nLine list is not arrange in order");return 0;}else{printf("\nLine list is arrange in order");return 1;}}3.5node *change(node *head){node *p,*q=0;while(head){p=head->next;head->next=q;q=head;head=p;;}head=q;return head;}3.6void seperate(node *head){ node *p1,*p2,*p,*headodd,*headeven,temp;p=head;while(p) /*找到第一个奇数结点,由headodd指向*/ { if(p->info%2!=0){headodd=p;break;}elsep=p->next;}p=head;while(p) /*找到第一个偶数结点,由headeven指向*/ {if(p->info%2==0){ headeven=p;break;}elsep=p->next;}p=head;p1=headodd;p2=headeven;while(p){if(p->info%2!=0&&p==headodd)p=p->next;else if(p->info%2==0&&p==headeven) p=p->next;else if(p->info%2!=0){p1->next=p;p1=p;p=p->next;}else if(p->info%2==0){p2->next=p; p2=p;p=p->next;}}p1->next=p2->next=0;head=headeven;printf("该链表的偶数部分是:");print_link_list(head);printf("\n该链表的奇数部分是:");print_link_list(headodd);}3.7node *delete_x_to_y(node *head,int x,int y) {node *p=head,*q=head;for(;q;q=q->next){if(q->info>x&&q->info<=y&&q==head)head=q->next;else{if(q->info>x&&q->info<=y){p->next=q->next;}elsep=q;}}return head;}第四章字符串、数组和特殊矩阵题4.1# include <stdio.h># define MAXSIZE 100typedef struct{char str[MAXSIZE];int length;}seqstring;seqstring *init(seqstring *S){S->str[0]='\0';S->length=0;return S;}int sign(int r){if(r>0) return 1;if(r==0) return 0;if(r<0) return -1;}int strcompare(seqstring *S,seqstring *T){int i=1,j=0;while(!(i=S->str[j]-T->str[j])){j++;if(S->str[j]=='\0'&&T->str[j]=='\0') break;}return sign(i);}void print(seqstring *S){int i;for(i=0;i<S->length;i++)printf("%c",S->str[i]);}main(){seqstring *S=init(S),*T=init(T);int a,i=0;clrscr();printf("This program is to compare two strings.\nplease input first string\n"); while((S->str[i]=getchar())!='\n'){i++;}S->str[i]='\0';S->length=strlen(S->str);printf("please input second srting\n");i=0;while((T->str[i]=getchar())!='\n'){i++;}T->str[i]='\0';T->length=strlen(T->str);printf("\nthe first you input :");print(S);printf("\nthe second you input :");print(T);a=strcompare(S,T);printf("\nafter compare,return value %d",a); getch();}题4.4#include<stdio.h>typedef struct node{char data;struct node *next;}linkstrnode;typedef linkstrnode *linkstring;linkstring *strcreat(linkstring *S){char ch;linkstrnode *p,*r;*S=0; r=0;while((ch=getchar())!='\n'){p=(linkstrnode *)malloc(sizeof(linkstrnode)); p->data=ch;if(*S==0)*S=p;elser->next=p;r=p;}if(r!=0) r->next=0;return S;}void print(linkstring S){linkstring q=S;for(;q!=0;q=q->next)printf("%c",q->data);}void strinsert(linkstring *S,int i,linkstring T) {int k;linkstring p,q;p=*S,k=1;if(i==1){q=T;while(q->next) q=q->next;q->next=*S;*S=T;}else{while(p&&k<i-1){p=p->next;k++;}if(!p) printf("Error\n");else{q=T;while(q->next) q=q->next;q->next=p->next;p->next=T;}}}void strdelete(linkstring *S,int i,int len) {int k;linkstring p,q,r;p=*S,q=0;k=1;while(p&&k<i){q=p;p=p->next;k++;}if(!p)printf("Error 1\n");else{k=1;while(k<len&&p){p=p->next;k++;}if(!p) printf("Error 2\n");else{if(!q){ r=*S;*S=p->next;}else{r=q->next;q->next=p->next;}p->next=0;while(r!=0){p=r;r=r->next;free(p);}}}}linkstring substring(linkstring S,int i,int len) {int k;linkstring p,q,t,r;p=S,k=1;while(p&&k<i){p=p->next;k++;}if(!p){printf("Error\n");return 0;}else{r=(linkstring)malloc(sizeof(linkstrnode));r->data=p->data;r->next=0;k=1;q=r;while(p->next&&k<len){p=p->next;k++;t=(linkstring)malloc(sizeof(linkstrnode));t->data=p->data;q->next=t;q=t;}if(k<len) {printf("Error 2\n");return 0;}else{q->next=0;return(r); }}}/*Creat a new linkstring=b*/linkstring newcopy(linkstring x,linkstring y){linkstring q,t=x,new;for(q=y;q;q=q->next){new=(linkstring)malloc(sizeof(linkstrnode));new->data=q->data;if(t==0) x=new;else t->next=new;t=new;}t->next=0;return x;}void replace(linkstring *S,linkstring a,linkstring b) /*4.4*/ {linkstring p=*S,q=a,r=b,temp,t;int i,j=0,k=0,l=0;while(p!=0){p=p->next;j++;}while(q!=0){q=q->next;k++;}while(r!=0){r=r->next;l++;}for(i=1;i+k<j+2;i++){temp=substring(*S,i,k);q=a;while(temp!=0&&q!=0){if(temp->data!=q->data) break;temp=temp->next;q=q->next;}if(temp==0&&q==0){t=0;t=newcopy(t,b);printf("\nHehe%d %d",i,k);strdelete(S,i,k);strinsert(S,i,t);j=j-k+l;i=i+l-1;}}}main(){linkstrnode *S,*T1,*T2;clrscr();printf("The program is to S,T1 replaced by T2.\nplease input string S:\n"); strcreat(&S);printf("please input string T1:\n");strcreat(&T1);printf("please input string T2:\n");strcreat(&T2);printf("\nS:"); print(S);printf("\nT1:"); print(T1);printf("\nT2:"); print(T2);replace(&S,T1,T2);printf("\n\n");print(S);getch();}题4.7分别使用按行优先和按列优先的顺序写出三位数组A[3][2][4]中所有元素在存储器中的存储次序,并计算数组元素A[0][1][2]的地址。
《数据结构》填空作业题答案第1章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。
2.程序包括两个内容:数据结构和算法。
3. 数据结构的形式定义为:数据结构是一个二元组:Data Structure =(D,S)。
4. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。
5. 数据的逻辑结构可以分类为线性结构和非线性结构两大类。
6. 在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。
7. 在树形结构中,数据元素之间存在一对多的关系。
8. 数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。
9. 数据的逻辑结构包括线性结构、树形结构和图形结构3种类型,树型结构和有向图结构合称为非线性结构。
10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。
11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。
12. 数据的存储结构可用4种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。
13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。
14. 数据结构在物理上可分为顺序存储结构和链式存储结构。
15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。
16. 数据元素可由若干个数据项组成。
17. 算法分析的两个主要方面是时间复杂度和空间复杂度。
18. 一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。
19. 算法具有如下特点:有穷性、确定性、可行性、输入、输出。
20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果。
第一章概论自测题答案一、填空题1. 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和运算等的学科。
2. 数据结构被形式地定义为(D, R),其中D是数据元素的有限集合,R是D上的关系有限集合。
3. 数据结构包括数据的逻辑结构、数据的存储结构和数据的运算这三个方面的内容。
4. 数据结构按逻辑结构可分为两大类,它们分别是线性结构和非线性结构。
5. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。
6.在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有 1个前驱结点;最后一个结点没有后续结点,其余每个结点有且只有1个后续结点。
7. 在树形结构中,树根结点没有前驱结点,其余每个结点有且只有1个前驱结点;叶子结点没有后续结点,其余每个结点的后续结点数可以任意多个。
8. 在图形结构中,每个结点的前驱结点数和后续结点数可以任意多个。
9.数据的存储结构可用四种基本的存储方法表示,它们分别是顺序、链式、索引和散列。
10. 数据的运算最常用的有5种,它们分别是插入、删除、修改、查找、排序。
11. 一个算法的效率可分为时间效率和空间效率。
二、单项选择题(B)1. 非线性结构是数据元素之间存在一种:A)一对多关系 B)多对多关系C)多对一关系 D)一对一关系( C )2. 数据结构中,与所使用的计算机无关的是数据的结构;A) 存储 B) 物理C) 逻辑 D) 物理和存储(C)3. 算法分析的目的是:A) 找出数据结构的合理性B) 研究算法中的输入和输出的关系C) 分析算法的效率以求改进D) 分析算法的易懂性和文档性(A)4. 算法分析的两个主要方面是:A) 空间复杂性和时间复杂性B) 正确性和简明性C) 可读性和文档性D) 数据复杂性和程序复杂性(C )5. 计算机算法指的是:A) 计算方法B) 排序方法C) 解决问题的有限运算序列D) 调度方法(B)6. 计算机算法必须具备输入、输出和等5个特性。
第一章 绪论练习一1、 设有数据逻辑结构为Data-Structure = (D,S),其中D={d 1, d 2, …, d 9},S={r},r={< d 1,d 3>, < d 1, d 8>,< d 2, d 3>, <d 2, d 4>, <d 2, d 5>, <d 3, d 9>,<d 5, d 6>,<d 8, d 9>,<d 9, d 7>,<d 4,d 6>,<d 4, d 7>},画出这个逻辑结构的图示,对于关系r ,那些结点是起始结点,那些结点是终端结点?2、 设n 为整数,试确定下列各程序中前置以@语句的频度(1) FOR (i=1;i<=n;i++){FOR (j=1;j<=i;j++){FOR (k=1;k<=j;k++) @ x+=delta; } }(2) X=91;y=100;WHILE (y>0){@ if (x>100) {x-=10;y--;} else x++; }3、 按增长率由小到大的顺序排列下列各函数:,log,log,,!,,,,)34(,)32(,)23(,22223100nn n n n n n n n n n nnnn n n n 2log22222,log),(loglog ,log4、设有以下三个函数:f(n)=21n 4+ n 2+1000, g(n)=15 n 4 +500n 3 h(n)=5000 n 3.5+nlogn判断下列断言正确与否: (1) f(n)是O(g(n)); (2) h(n)是O(f(n)); (3) g(n)是O(h(n)); (4) h(n)是 O(n 3.5) (5) h(n)是 O(nlogn) 5、试用数学归纳法证明:(1)∑=+--=ni n i x x x 01)1/()1( )且(01≥≠n x (2)∑==-ni n i 12)12()(1≥n 6、试写一算法自大到小依次输出顺序读入的三个整数X 、Y 、Z 的值。
1 数据结构作业 一、设n为整数,利用大“O”记号,求下列程序段的时间复杂度 1、i=0;k=0; Do { k=k*10*i; i++; } while (i// T(n)=O(n) 2、i=1; j=0; while(i+j<=n) { if(i>j) j++; else i++; } // T(n)=O(n) 3、 x=n; //n>1 while (x>=(y+1)*(y+1)) y++;
// T(n)=O(n) 4、x=91; y=100; while (y>0) if (x>100) {x=x-10; y- -;} else x++; // T(n)=常数=O(1) 二、选择题 1、从逻辑上可以把数据结构分为( C )两大类。 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 2、以下数据结构中,哪一个是线性结构( D )? A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 3、在下面的程序段中,对x的赋值语句的频度为( C ) for (i=1;i<=n;i++) for (j=1;j<=n;j++) x=x+1; A. O(2n) B.O(n) C.O(n2) D.O(log2n) 4、下面关于线性表的叙述中,错误的是哪一个?( B ) A.线性表采用顺序存储,必须占用一片连续的存储单元。 B.线性表采用顺序存储,便于进行插入和删除操作。 C.线性表采用链接存储,不必占用一片连续的存储单元。 2
D.线性表采用链接存储,便于插入和删除操作。 5、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。 A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表 6、 静态链表中指针表示的是( B ). A. 内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址 7、下面的叙述不正确的是( B、C ) A.线性表在链式存储时,查找第i个元素的时间同i的值成正比 B. 线性表在链式存储时,查找第i个元素的时间同i的值无关 C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比 D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关 8、 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( C )(1<=i<=n+1)。 A. O(0) B. O(1) C. O(n) D. O(n2) 9、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:( B )。 A.p->next=s;s->next=p->next; B. s->next=p->next;p->next=s; C.p->next=s;p->next=s->next; D. p->next=s->next;p->next=s; 10、对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是( B ) A.head==NULL B.head→next==NULL C.head→next==head D.head!=NULL 11、 一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是( B )。 A. 不确定 B. n-i+1 C. i D. n-i 12、 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?( C ) A. 5 4 3 6 1 2 B. 4 5 3 1 2 6 C. 3 4 6 5 2 1 D. 2 3 4 1 5 6 13、 设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是( C )。 A.XYZ B. YZX C. ZXY D. ZYX 14、 假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为( A )。 A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m D.(rear-front)%m 15、 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( B ) A. 1和 5 B. 2和4 C. 4和2 D. 5和1 16、下面关于串的的叙述中,哪一个是不正确的?( B ) A.串是字符的有限序列 B.空串是由空格构成的串 C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 17、设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( C ) A.求子串 B.联接 C.匹配 D.求串长 18、 设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到8 ,j的值为1 到10, 3
数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( B )。 A. BA+141 B. BA+180 C. BA+222 D. BA+225 19、广义表A=(a,b,(c,d),(e,(f,g))),则下面表达式的值为( D )。 Head(Tail(Head(Tail(Tail(A))))) A. (g) B. (d) C. c D. d 三、判断题 1、数据元素是数据的最小单位。( 错 ) 2、顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( 错 ) 3、线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。( 对 ) 4、线性表的特点是每个元素都有一个前驱和一个后继。( 错 ) 5、一个稀疏矩阵Am*n采用三元组形式表示, 若把三元组中有关行下标与列下标的值互换,并把m和n的值互换,则就完成了Am*n的转置运算。( 错 ) 6、所谓取广义表的表尾就是返回广义表中最后一个元素。( 错 ) 四、填空题 1、当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用 顺序 存储结构。 2、线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是 (n-1)/2 。 3、对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为 O(1),在给定值为x的结点后插入一个新结点的时间复杂度为 O(n) 。 4、带头结点的双循环链表L中只有一个元素结点的条件是: L->next==L->prior (或 L->prior->prior==L) 5、一个栈的输入序列是:1,2,3则不可能的栈输出序列是 3,1,2 。 6、用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为 SXSSXSXX 。 7、 队列 又称作先进先出表。 8、组成串的数据元素只能是 字符 。 9、设有C语言描述的二维数组A[10][20],其每个元素占两个字节,第一个元素的存储地址为100,若按行优先顺序存储,则元素A[6][6]存储地址为 352 。 五、算法设计题 1、请设计一算法:已知顺序表L,表中元素为整型且递增有序,现有一值为e的元素要插入L表,使插入后L表仍然有序。 2.已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。 3.设计一算法,逆置带头结点的动态单链表L。 4.在长度大于1的单循环链表中,既无头结点也无头指针。s为指向链表中某个结点的指针,试编写算法删除结点*s的直接前趋结点。 1、方法一: #define LIST_INIT_SIZE 100 4
#define LISTINCREMENT 10 Status sqlist_insert(sqlist &L, int e) { int *p, *newbase; if (L.length==L.listsize) //空间不够,需重新申请 { newbase=(int *)realloc(L.elem, (L.listsize+Listincrement) *sizeof(int) ); if (!newbase) exit(overflow); L.elem=newbase; L.listsize+=listincrement; //新基址和存储容量 } for (p=L.elem+L.length;p>=L.elem && *p>e;--p ) //从表尾开始比较和移动 *(p+1)=*p; *(p+1)=e; ++L.length; Return ok } 方法二: Status sqlist_insert(sqlist &L, int e) { int i, *newbase; if (L.length==L.listsize) //空间不够,需重新申请 { newbase=(int *)realloc(L.elem, (L.listsize+Listincrement) *sizeof(int) ); if (!newbase) exit(overflow); L.elem=newbase; L.listsize+=listincrement; //新基址和存储容量 } for (i=L.length-1;i>=0 && L.elem[i]>e;--i ) //从表尾开始比较和移动 L.elem[i+1]=L.elem[i]; L.elem[i+1]=e; ++L.length; Return ok } 2、方法一: Void Linklist_insert(linklist &L, int e) { linklist p,pre; pre=L; p=L->next; //pre是p的直接前驱 while(p&&p->data p=p->next; s=(linklist)malloc(sizeof(LNode)) s->data=e; s->next=p; //s插在pre的后面,p的前面