数据结构(C语言)

来源:百度知道 编辑:UC知道 时间:2024/05/05 04:13:22
1.关于图G,下列说法最合理的是
A 若图G的邻接矩阵是对称的,则G一定是无向图
B 借助于邻接矩阵容易判定任意两个顶点之间是否有边(或弧)相连
C 借助于邻接表容易判定任意两个顶点之间是否有边(或弧)相连
D 在十字链表中,不存在与顶点对应的结点
选什么 麻烦说明下理由
2.对于顺序栈,设base为栈底指针,top为栈顶指针,求栈中元素的个数表达式为_______(填空题)
3.有一算法
typedef struct LNode
{ int data;
strcut LNode *next;
}*LinkList;
int fun(Linklist &p, intx)
{ int flag=1;
Linklist q,r,s;
s=(LinkList)malloc(sizeof(Lnode));
s->data=x;
s->next=NULL;
r=p;
if(!p)
{p=s;
flag=-1;
}//if
//S1;
while(r&&flag==1)
{ q=r;
if(r->data==x)
{r->data*=x;
flag=0;
}
r=r->next;
}//while
//S2:
if(flag==1)
{ q->next=s;
}//if
return flag;
}
当函数返回值为-1,1时,分别表示什么含义?S1与S2之间的程序段是什么功能?r->data*=x是什么含义?(另外麻烦解释下//S1 //S2 //if什么意思)
4.设a[1....2n]中存储某自然数

1. B
原因:
A:无向图的邻接矩阵一定是对称的,但是对称的不都是无向图,因为有向图也有可能对称
B:显然。。。。最容易,因为看任意两个点可以从行或者列任意挑一个,然后看相交点是否为1就行了
C:邻接表相当的不好看
D:十字链表也不容易

2. top - base + 1

3.返回值为-1,说明linklist为空,同时把函数的参数x插入linklist
返回值为0,说明linklist中有内容为x的元素
返回值为1,说明linklist不为空,但是没有内容为x的元素,同时把函数的参数x插入linklist

r->data*=x 的意思是 r->data = r->data*x

S1就是做了一个判断linklist是否为空,如果为空把x插入到linklist里面的工作
S2就是遍历linklist的所有内容,查找是否有内容为x的元素,如果有把data里面存放的数乘以x,然后再放回到data里面。
最后的if就是对S2做最后的补充,因为在执行S2的时候,把原来的数据换成原来的数据乘以x了,所以就再添加进去。

我觉得编写这个程序的人,有点绕路了,既然后来填进去,当初何必改呢。。。。。。

4.用冒泡排序的算法,虽然算法的复杂度高(指的是算法效率不高),但是算法简单易懂,基本上所有的新手书上都有。
(1)让初始值为1,步长为2,做一次冒泡排序就行了
(2)让初始值为2,步长为2,做一次冒泡排序就行了
(3)count = 0;
for (i = 0; i< lengthof(a); i++) {
for (j = 0; j< lengthof(a); j+ {
if (a[i]==a[j]) count++;
};
};
这是一段伪代码,可以作为参考

A