c语言描述abc表达式cba,《数据结构(C语言描述)》马秋菊源代码和习题参考附标准答案.doc...

本文详细介绍了线性表的各种操作,包括顺序表和链表的删除、插入、反转等操作,分析了它们的时间复杂度,并探讨了使用尾指针对循环链表操作的优势。此外,还提供了在循环单链表上实现线性表长度计算的算法及其时间复杂度。
摘要由CSDN通过智能技术生成

习题配套

第一章

2.C、A、B、B、A、A、D

3.

D={A,B,C,E,F,G,H,I,J};

R={,,,,,,,,,}

A

A

B

C

E

F

G

H

I

题1-3图

J

4.顺序、链式、索引、哈希.

*5.解:100n2>2nn至少要多大

6.O(n)、O(n)、O(n)、O()、

(5)当n>m,O(n),当m>n,O(m)

7.n!

2100>lgn>n1/2>n3/2>(3/2)n>2n>nlgn>nn

第二章

1.×、√、×、√、√

2.AAD

4.顺序表

void Delete_SeqListx(SeqList*L,ElemType x)

/*删除表中值为x元素*/

{inti,j;

for(i=1;i<=L->length;i++){

if(L->elem[i]==x){

for(j=i;j<=L->length-1;j++)

L->elem[j]=L->elem[j+1];

L->length--;

}/*向上移动*/

}

O(n2)

链表

voiddel_link(LinkListH,intx)/*删除数据域为x的结点*/

{

LNode*p,*q;

p=H;q=H->next;

while(q!=NULL)

{

if(q->data==x){

p->next=q->next;free(q);q=p->next;

}

else{p=q;q=q->next;}

}

}

O(n)

5.

int Delete_SeqListx(SeqList*L,int i,int k)

/*删除表中删除自第i个结点开始的k个结点*/

{intj;

if(i<1||k<0||i+k-1>L->length)

/*检查空表及删除位置的合法性*/

{printf("不存在第i个元素");

returnERROR;}

for(j=i;j<=L->length-k;j++)

L->elem[j]=L->elem[j+k];/*向上移动*/

L->length-=k;

ReturnOK;/*删除成功*/

}

O(n)

6.

void Delete_SeqListx(SeqList*L,ElemType x)

/*将表中值为x元素换成y*/

{inti,j;

for(i=1;i<=L->length;i++){

if(L->elem[]==x){

L->elem[i]=y;

}/**/

}

O(n)

7.写一算法在循环单链表上实现线性表的CList_length(L)运算.

int link_length(LinkListH)

{

LNode*p;int i=0;

p=H;

while(p->next!=H)

{i++;

p=p->next;

}

return i;

}

O(n)

8.

在用头指针表示的单循环链表中,查找开始结点a1的时间是O(1),然而要查找终端结点则需从头指针开始遍历整个链表,其时间是O(n).但在很多实际问题中,表的操作常常是在表的首、尾位置上进行,如果改用尾指针rear来表示单循环链表,则查找开始结点a1和终端结点an都很方便,它们的存储位置分别是rear->next->next和rear,显然,查找时间都是O(1).

9.

int Insert_LinkListab(LinkList H, ElemType a,ElemType b)

/*在单链表中值为a的结点前插入一个值为b的结点*/

{LNode*q=H,*s;*p=H->next;

while(p!=NULL&&p->data!=a)/*q->next&&q->next->data!=a*/

{q=p;p=p->next;

}/*查找a结点*/

s=(LinkList)malloc(sizeof(LNode));/*申请、填装结点*/

s->data=b;

s->next=q->next;/*新结点插入在第i-1个结点的后面*/

q->next=s;

return OK;

}/*Insert_LinkListab*/

10.顺序表

void Reverse_Sq(SqList *L)/*顺序表的就地逆置*/

{

for(i=1,j=L.len;i

{t=L.elem[i];L.elem[i]=L.elem[L.len-i+1];L.elem[L.len-i+1]=t;}

}/*Reverse_Sq*/

单链表

void Reverse_L(LinkList*H)/*为简化算法,假设表长大于2*/

{

p=H->next;q=p->next;s=q->next;p->next=NULL;

while(s->next)

{

q->ne

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值