数据结构用c语言描述答案唐策善,唐策善数据结构答案-用C语言描述

第二章线性表(参考答案)

在以下习题解答中,假定使用如下类型定义:

2.1 头指针:指向链表的指针。因为对链表的所有操均需从头指针开始,即头指针具有标识链表的作用,所以链表的名字往往用头指针来标识。如:链表的头指针是la,往往简称为“链表la”。

头结点:为了链表操作统一,在链表第一元素结点(称为首元结点,或首结点)之前增加的一个结点,该结点称为头结点,其数据域不无实际意义(当然,也可以存储链表长度,这只是副产品),其指针域指向头结点。这样在插入和删除中头结点不变。

开始结点:即上面所讲第一个元素的结点。

2·5

void insert(linklist *L,ElemType x)

// 带头结点的单链表L递增有序,本算法将x插入到链表中,并保持链表L的递增有序。{ linklist *p=L->next, *pre=L,*s;

// p为工作指针,指向当前元素,pre为前驱指针,指向当前元素的前驱

s=(linklist *)malloc(sizeof(linklist));//申请空间,不判断溢出

s->data=x;

while (p && p->data<=x) {pre=p; p=p->next;} // 查找插入位置

pre->next=s; s->next=p; // 插入元素

} // 算法结束

2·9

void deleteprior(linklist *L)

// 长度大于1的单循环链表,既无头结点,也无头指针,本算法删除*s 的前驱结点

{ linklist *p=s->next,*pre=s; // p为工作指针,指向当前元素,

// pre为前驱指针,指向当前元素*p的前驱

while (p->next!=s) {pre=p; p=p->next;} // 查找*s的前驱

pre->next=s;

free(p); // 删除元素

} // 算法结束

第三章栈和队列(参考答案)

3.1 1234四辆车进栈,写出出战顺序?

1 2 3 4 2 1 3 4 3 2 1 4 4 3 2 1

1 2 4 3 2 1 4 3 3 2 4 1

1 3

2 4 2

3 1

4 3 4 2 1

1 3 4

2 2

3

4 1

1 4 3

2 2 4

3 1

设入栈序列元素数为n,则可能的出栈序列数为C2n n=(1/n+1)*(2n!/(n!)2)

3.3 void sympthy(linklist *head, stack *s)

//判断长为n的字符串是否中心对称

{ int i=1; linklist *p=head->next;

while (i<=n/2) // 前一半字符进栈

{ push(s,p->data); p=p->next; }

if (n % 2 !==0) p=p->next;// 奇数个结点时跳过中心结点

while (p && p->data==pop(s)) p=p->next;

if (p==null) printf(“链表中心对称”);

else printf(“链表不是中心对称”);

} // 算法结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值