C语言链表一道题,跪求大神

C语言链表一道题,跪求大神,第1张

//删除所有无效数值结点的函数原型:

void deleteneg(PNODE head)

{

PNODE p,q         

p = head 

q = head

while ( p->next != NULL )         

{   

if( p->next->data < 0)

{

p->next = p->next->next

p = q

}

q = p

p = p->next         

}

说明:

1. 本试题分可选题和必选题两部分。必选题需要根据题目要求回答。

2. 本试题考试时间为 0.5 小时。

3. 本试题完成后,请标明你的姓名以及联系方式(包括:Email、联系电话)。

注意事项:

1、在规定时间内自行选题(在可选题部分中),选题数目不能少于2个,难度不限,编程语言不限(除非题目中有特别说明)。

2、尽可能用代码段或函数完成,或自然语言来描述解题方法。

3、评分标准跟所选题目的数量和完成度无关,请尽可能展示自己的编程能力、思路、经验和风格。

可选题部分:

(1) 请使用目录树遍历的方法统计出指定逻辑驱动器的目录总数及文件总数,并显示硬盘空间浪费的百分比

>类别:系统类

>难度:中级

(2) 列出局域网中的所有工作组和计算机名,并可显示每一个计算机的共享目录

>类别:系统类

>难度:高级

(3) 写一个类似OICQ点对点消息发送软件,仅实现发送和接收的功能即可

>类别:网络编程类

>难度:高级

(4) 为DataGrid(WinForm)增加ComboBox样式的数据列

>类别:数据库编程类

>难度:中级

(5) 一维数组iArray[10],类型为int。请使用选择排序算法对其排序,并输出结果。

>类别:数据算法

>难度:初级

(6) 请新建一个类(名称为ClassA),该类必须含有三个属性:姓名(字符串),性别(布尔值),年龄(数值)。

用该类建立一个链表,该链表有以下算法:创建、添加、插入、删除和查找,算法内不用

考虑内存的分配与释放

>类别:数据结构

>难度:中级

Public Class ClassA{

Public string name

Public boolean sex

Public int age

}

(7) 在上题的基础上,实现以下两个功能:

a. 保存该链表为二进制文件test.lib(存放在本题目路径之下)

b. 读取生成的二进制文件到链表中。

>类别:数据结构

>难度:中级

(8) 你所知道有哪些 *** 作平台,谈谈你对他们的见解

>类别:其它类

>难度:无

(9) 你所知道有哪些编程语言,谈谈你对他们的看法,你使用过哪些语言,熟练程度

如何,编写过什么样的程序

>类别:其它类

>难度:无

(10) 请用VBScript或JavaScript语言中任何一种,与CSS结合,编写出移动Layer的例子,具体效果与Windows窗体类似。

>类别:Web

>难度:中级

必选题部分(必须用VS2003开发):

(1) C#回答题:请描述抽象类、接口、结构三者的区别:

抽象类当中的属性和方法不能被其子类重写,接口只定义其中的属性和方法,其方法的实现部分必须在其继承的子类中实现,结构和类比较类似,也有其属性和方法,但不能被继承和实例化.

(2) C#编程题:在WinForm 中实现类似于Windows 资源管理器的功能,左边有目录树,点击目录树,在右边显示该目录下的所有文件。查看方式分:大图标、小图标、列表、详细资料等。

(3) 写一个简单的存储过程或触发器,要求能正确运行(数据库采用Oracle,自建测试表)

Create table test

(id int primary key,

Name varchar2(10) not null,

Address varchar2(50),

Tel varchar2(18)

)

Create or replace procedure InsertTest as

Declare IDN test.id%type

Declare VName test.name%type

Declare VAddress test.address%type

Declare VTel test.tel%type

Begin

Select nvl(decode(max(id),0,1,max(id)),1) + 1 into IDN

End

When

4 更多相关文章推荐参考:

安捷伦笔试真题

中兴数据库笔试真题

工商银行历年考试真题

这个算法有两个循环,我们姑且称其为外循环和内循环,诚如其他楼的一位网友所言,其内循环在第一次判断时进不去是正常的,但后面会进去。为什么呢?首先我们来理一下这个算法的大体思路:这是一个针对单链表的排序算法,就是说给定一个单链表,我们要把按照结点(这里不对头结点进行排序,即这里讨论的结点不包括头结点)的数据域中的data值的大小从小到大进行排序,得到新的排序后的有序链表。我们先把链表的头结点之后的部分链表拆下来,即p=L->next,L->next=NULL,这样我们就拆分原来的链表变成了现在的两个链表(我们称只有一个头结点的链表为L1,另一个全为数据项结点的链表为L2)。接下来我们一个一个从L2剥下单独的结点,放到L1中,其中如果L1中已经有数据项结点,则要先进行data项比较再找到合适的地方插入。直到最后L2中的结点全部拆下来并装到了L1上,于是排序完毕,此时的L1拥有与原来的单链表相同的头结点,但是排列有序的数据项结点。

理完了整个算法的思路后再回去看代码就很明显,外循环判断“p!=NULL”的意义在于判断L2链表中是否还有没有剥完的结点,而内循环中要先判断“q!=NULL”的第一层意义在于判断L1链表是不是一个只有头结点的空表(即无数据项结点),如果是,则直接插入,如果不是,则判断目前L1头结点的下一个结点q的data值是否小于等于刚从L2剥下来的结点p的data值,如果是,则说明这个p结点应该安放的位置还在q结点之后,我们还要继续往下找,直到找到q->data >p->data的结点q或者已经到了链表的末尾(这也是q!=NULL的第二层意义),则停止寻找,并将p结点就放在这个位置。

说了半天忘了回答楼主的疑问,为什么内循环永远不会进去吗?不是,只是第一次不会进去(当然,如果原单链表本身就是一个只有头结点的链表时那么后面也不会再进去了,因为空表根本不需要排序),而后面就会进去,具体原因见我上述分析即可知。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11855707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存