顺序表与链表Word格式.docx
- 文档编号:429525
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:16
- 大小:17.20KB
顺序表与链表Word格式.docx
《顺序表与链表Word格式.docx》由会员分享,可在线阅读,更多相关《顺序表与链表Word格式.docx(16页珍藏版)》请在冰点文库上搜索。
L,intn)
inti;
//判断n的合法性
if(n<
1||n>
L.listsize)
exit(ERROR);
else
{
for(i=0;
i<
n;
i++)
printf("
请输入第%d个数据:
\n"
i+1);
scanf("
%d"
&
L.elem[i]);
L.length++;
}
returnOK;
}
//输出顺序表
voidprint(SqListL)
printf("
顺序表中的数据为:
);
for(i=0;
L.length;
%5d"
L.elem[i]);
//插入操作
intlist_insert(SqList&
L,inti,inte)
int*newbase,*q,*p;
//1.插入位置不合法i>
=1&
&
=L.length+1
if(i<
1||i>
L.length+1)returnERROR;
//2.存储空间不够
if(L.length==L.listsize){
//增加存储空间
newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
newbase)exit(OVERFLOW);
//不成功
//如果成功
L.elem=newbase;
L.listsize+=LISTINCREMENT;
//3.正常插入
q=&
L.elem[i-1];
//第i个元素的地址
p=&
L.elem[L.length-1];
//最后一个元素的地址
for(p;
p>
=q;
p--)
*(p+1)=*p;
*q=e;
L.length++;
//删除
intdelete_list(SqList&
L,inti,int&
e)
int*q,*p;
//1.判断删除位置是否合法
L.length)
returnERROR;
//2.正常删除
e=*q;
for(q;
q<
=p;
q++)
*q=*(q+1);
L.length--;
//顺序表的合并
voidmerge_list(SqListLa,SqListLb,SqList&
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){
if(*pa<
=*pb)
*pc++=*pa++;
else*pc++=*pb++;
//当表La空时
while(pb<
*pc++=*pb++;
////当表Lb空时
=pa_last){
*pc++=*pa++;
}
voidmain()
SqListS;
inti=3;
//插入位置
inte1=100;
//插入元素
intn=5;
//元素的个数
inte2;
//带回删除的元素
intresult;
intfan;
intinput_result;
init_list(S);
input_result=input(S,n);
if(input_result==0)printf("
输入的n值非法!
print(S);
result=list_insert(S,i,e1);
if(result==1){
printf("
插入成功!
插入后的表为:
elseif(result==-2)
内存不足!
elseprintf("
输入的i值非法!
fan=delete_list(S,i,e2);
if(fan==0)
删除位置不合法!
else
删除的元素为:
%5d\n"
e2);
//printf("
删除后的顺序表为:
SqListLa,Lb,Lc;
init_list(La);
input(La,3);
print(La);
init_list(Lb);
input(Lb,5);
print(Lb);
merge_list(La,Lb,Lc);
print(Lc);
单链表。
#include<
#defineTURE1
#defineFALSE0
#defineOK1
#defineERROR0
typedefstructLNode
intdata;
structLNode*next;
}LNode,*LinkList;
intGetElem_L(LinkListL,inti,int&
e)//取链表中的元素,e为返回值。
LinkListp;
intj;
p=L->
next;
j=1;
while(p&
j<
i)
p=p->
++j;
p||j>
returnERROR;
{
e=p->
data;
voidcreat(LinkList&
L,intn)//创建链表
L=(LinkList)malloc(sizeof(LNode));
L->
next=NULL;
for(i=n;
i>
0;
i--)
p=(LinkList)malloc(sizeof(LNode));
输入第%d个节点:
"
i);
scanf("
p->
data);
p->
next=L->
L->
next=p;
intListInsert(LinkList&
L,inti,inte)//插入链表
LinkListp,s;
i-1)
s=(LinkList)malloc(sizeof(LNode));
s->
data=e;
next=p->
p->
next=s;
intdelete_list(LinkList&
L,inti,inte)//删除链表
LinkListp,q;
p=L;
j=0;
while(p->
next&
j++;
q=p->
e=p->
next=q->
free(q);
voidprint(LinkListL)//输出链表
while(p)
p->
inti=1;
inte1;
inte2=100;
inte3;
LinkListH;
creat(H,n);
创建链表:
print(H);
GetElem_L(H,i,e1);
取出第%d个数:
e1);
ListInsert(H,i,e2);
插入第%d的位置%d\n"
i,e2);
delete_list(H,i,e3);
在第%d删除后:
删除元素为%d"
e3);
计算单链表中节点的个数。
typedefstructnode
structnode*next;
}LNode;
voidcount(LNode*L)
LNode*p;
intn=0;
%d"
p=p->
n++;
\n%d"
n);
inte;
node*head,*p,*q;
head=(LNode*)malloc(sizeof(LNode));
head->
p=head;
输入元素,回车结束:
do
e);
q=(node*)malloc(sizeof(node));
q->
data=e;
next=NULL;
next=q;
p=q;
}while(getchar()!
='
\n'
count(head);
26.删除单链表中值为x的元素。
#include"
}LNode,*Linklist;
voidcreat(Linklist&
L,intn)//输入n个元素的值
Linklistp;
L=(Linklist)malloc(sizeof(LNode));
p=(Linklist)malloc(sizeof(LNode));
"
voidprint(LinklistL)
%2d"
voiddelete_list(Linklist&
L,inte)
Linklistp,s;
s=L;
if(p->
data==e)
{
s->
free(p);
p=s->
else
s=p;
p=p->
inte1=3;
//删除值为x的元素
LinklistH;
创建的链表为:
delete_list(H,e1);
删除值为%d的元素后:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 顺序