北师大《数据结构》在线作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简答

带头结点的链表和不带头结点的链表有什么不同?

单链表是一种最为基本的数据结构,常用的单链表又分为带头结点和不带头结点两种。从线性表的定义可以知道,线性表要求允许在任意位置进行插入和删除操作。所有的

链表都有一个头指针head,带头结点的链表中head的数据项为空。

具体分析。

1.带头节点的链表的插入,首先使用临时变量p等于要插入之前的节点(不管具体的

插入位置),之后不管要插入的节点x是插到链表头还是插到链表的其他位置都是如

下语句: x->next = p->next;p->next = x;

2.不带头结点的链表的插入,若要插到链表的开头则

x->next = head->next;

head = x;//这里不再是head->next = x

若插到链表的其他位置则

p = 插入之前的节点

x->next = p->next;

p->next = x;

3.带头结点的链表的删除,不解释,同样不存在删除位置的差异。

4.不带头结点的链表的删除,删除第一个节点时,head=head->next。删除其他节点时,head的值不会改变。

综上所述,带头节点的单链表,不论删除和插入的位置如何,不需要修改head的值,不带头结点的单链表则需要修改head的值。所以单链表一般为带头结点的单链表。

论述

如果矩阵A中存在这样的一个元素A[i][j]满足条件:A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。编写一个函数计算出

m×n的矩阵A的所有马鞍点。

提示:依题意,先求出每行的最小值元素,放入min[m]之中,再求出每列的最大值

元素,放入max[n]之中,若某元素既在min[i]中,又在max[j]中,则该元素

A[i][j]便是马鞍点,找出所有这样的元素,即找到了所有马鞍点

//#include "stdafx.h"//vc++6.0

#include "stdio.h"

void main(void){

int a[5][5],i,j,jj,n,m,x,max,f;

printf("Enter m & n(Positive integer)...\n");

scanf("%d%d",&m,&n);

printf("Type some data...\n");

for(i=0;i

for(j=0;j

for(max=~(1<

if(x>a[i][j]) x=a[i][jj=j];

for(j=0;j

if(a[j][jj]>x) break;

if(j==m)

printf("%4d",f=x);

}

if(!f) printf("No!\n");

printf("\n");

}

相关文档
最新文档