1、L,int n) int i; /判断n的合法性 if(n L.listsize) exit(ERROR); else for(i=0;i=1&=L.length+1 if(iL.length+1 ) return ERROR; /2.存储空间不够 if(L.length=L.listsize) /增加存储空间 newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int);newbase) exit(OVERFLOW);/不成功 /如果成功 L.elem=newbase; L.listsize+=LISTINCREME
2、NT; /3.正常插入 q=&L.elemi-1; /第i个元素的地址 p=&L.elemL.length-1; /最后一个元素的地址 for(p;p=q;p-) *(p+1)=*p; *q=e; L.length+;/删除int delete_list(SqList &L,int i,int &e) int *q,*p; /1.判断删除位置是否合法L.length) return ERROR; /2.正常删除 e=*q; for(q;q=p;q+) *q=*(q+1); L.length-;/顺序表的合并void merge_list(SqList La,SqList Lb,SqList &
3、Lc) int *pa,*pb,*pc; int *pa_last,*pb_last; pa=La.elem; pb=Lb.elem; Lc.listsize=Lc.length=La.length+Lb.length; Lc.elem=(int *)malloc(sizeof(int)*Lc.listsize);Lc.elem) exit(OVERFLOW); /成功则合并 pc=Lc.elem; pa_last=La.elem+La.length-1; pb_last=Lb.elem+Lb.length-1; /两个表中都有元素时 while(pa=pa_last & pb=pb_last
4、) if(*pa=*pb) *pc+=*pa+; else *pc+=*pb+; /当表La空时 while(pb *pc+=*pb+; /当表Lb空时=pa_last) *pc+=*pa+; void main() SqList S; int i=3;/插入位置 int e1=100;/插入元素 int n=5;/元素的个数 int e2;/带回删除的元素 int result; int fan; int input_result; init_list(S); input_result=input(S,n); if(input_result=0) printf(输入的n值非法! print(
5、S); result=list_insert(S,i,e1); if(result=1) printf(插入成功!插入后的表为: else if(result=-2)内存不足! else printf(输入的i值非法! fan=delete_list(S,i,e2); if(fan=0)删除位置不合法! else 删除的元素为:%5dn,e2); /printf(删除后的顺序表为: SqList La,Lb,Lc; init_list(La); input(La,3); print(La); init_list(Lb); input(Lb,5); print(Lb); merge_list(L
6、a,Lb,Lc); print(Lc);单链表。#includenext; j=1; while(p&j +j;p|j return ERROR; e=p-data;void creat(LinkList &L,int n) /创建链表 L=(LinkList)malloc(sizeof(LNode); L-next=NULL; for(i=n;i0;i-) p=(LinkList)malloc(sizeof(LNode);输入第%d个节点:,i); scanf(p-data); p-next=L- L-next=p;int ListInsert(LinkList &L,int i,int e
7、) /插入链表 LinkList p,s;i-1) s=(LinkList)malloc(sizeof(LNode); s-data=e;next=p- p-next=s;int delete_list(LinkList &L,int i,int e) /删除链表 LinkList p,q; p=L; j=0; while(p-next& j+; q=p- e=p-next=q- free(q);void print(LinkList L) /输出链表 while(p),p- int i=1; int e1; int e2=100; int e3; LinkList H; creat(H,n)
8、;创建链表: print(H); GetElem_L(H,i,e1);取出第%d个数:,e1); ListInsert(H,i,e2);插入第%d的位置%dn,i,e2); delete_list(H,i,e3);在第%d删除后:删除元素为%d,e3);计算单链表中节点的个数。typedef struct node struct node *next;LNode;void count(LNode* L) LNode *p; int n=0;%d p = p- n+;n%d,n); int e; node *head,*p,*q; head = (LNode*)malloc(sizeof(LNo
9、de); head- p=head;输入元素,回车结束: doe); q=(node*)malloc(sizeof(node); q-data =e;next =NULL;next =q; p=q; while(getchar()!=n count(head);26.删除单链表中值为x的元素。#includeLNode,*Linklist;void creat(Linklist &L,int n) /输入n个元素的值 Linklist p; L=(Linklist)malloc(sizeof(LNode); p=(Linklist)malloc(sizeof(LNode); void print(Linklist L)%2dvoid delete_list(Linklist &L,int e) Linklist p,s; s=L; if(p-data=e) s- free(p); p=s- else s=p; p=p- int e1=3;/删除值为x的元素 Linklist H;创建的链表为: delete_list(H,e1);删除值为%d的元素后: