riceworm
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2008-10-22
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1607回复:15

小问题 300分奖励

楼主#
更多 发布于:2005-05-18 17:27
这是个在驱动中使用链表的问题:请参与者请提供演示代码,参与并提供代码者将有一定的分数奖励。

要求对下面的五个要求各自写成一个方法,代码需精干实用:
1.初始化链表,
2.查找,
3.删除,
4.插入,
5.释放链表,

链表结构模型
[0]-------[1]-------[2]-------[3]-------[4].........
 |         |         |         |         |
[a]-   [c]-[d]   [e]-[f]   [g]-[h]   -[j]

每个链表元素至少包含两个对象(wchar类型),例如[0] 中的a,b

小问题,大作用,欢迎各位的参与,不吝赐教
riceworm
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2008-10-22
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-18 17:43
链表结构模型
|--[0]-->[a]
      -->
|--[1]-->[c]
      -->[d]
|--[2]-->[e]
      -->[f]
|--[3]-->[g]
      -->[h]
|--.........
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-19 09:06
看《数据结构》
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-19 09:16
这种简单问题还是自己动手吧,呵呵
在交流中学习。。。
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-05-19 09:20
这种简单问题还是自己动手吧,呵呵
---内核开发合作或提供基础技术服务QQ:22863668 ---
riceworm
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2008-10-22
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-05-19 09:32
不答题者请勿发言,谢谢合作
idaxsy
驱动大牛
驱动大牛
  • 注册日期2004-12-09
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分386分
  • 威望54点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-05-19 10:04
首先定义链表节点的类型。
然后在device extension里定义一个指针变量,指向节点类型。
然后再写算法。

用C++也可以,更好看一点而已。
[b]万水千山总是情,回个帖子行不行?[/b]
riceworm
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2008-10-22
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-05-19 10:14
需要用纯C编写,希望参与者提供演示的代码
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2005-05-19 10:22
练练打字吧,当作去一个新公司,做了一道考题,既然有300分
不一定完全合乎提意,但适当改改就可以用

LIST_HEAD ListHead;
KSPIN_LOCK ListLock;

typedef struct _DATA
{
LIST_ENTRY ListEntry;
WCHAR x1;
WCHAR x2;
}DATA,*PDATA;

1.initialize function;
InitListHead(&ListHead);
KeInitalizeSpinLock(&ListLock);

2.search;
PDATA FindInList(WCHAR key1,WCHAR key2)
{
KIRQL OldIrql;
LIST_ENTRY Entry;
PDATA pData;
BOOLEAN Found = FALSE;
KeAcquireSpinLock(&ListLock,&OldIrql);

for(Entry = ListHead.Flink;Entry!=&ListHead;Entry=Entry->Flink)
{
pData = CONTAINING_RECORD(Entry,DATA,ListEntry);
if(pData->x1 == key1 && pData->x2 == Key2)
{
Found = TRUE;
break;
}
}
KeReleaseSpinLock(&ListLock,OldIrql);

if(Found)
return pData;
else
return NULL;
}

3.Delete
PDATA Delete(WCHAR key1,WCHAR key2)
{

KIRQL OldIrql;
LIST_ENTRY Entry;
PDATA pData;
BOOLEAN Found = FALSE;
KeAcquireSpinLock(&ListLock,&OldIrql);

for(Entry = ListHead.Flink;Entry!=&ListHead;Entry=Entry->Flink)
{
pData = CONTAINING_RECORD(Entry,DATA,ListEntry);
if(pData->x1 == key1 && pData->x2 == Key2)
{
Found = TRUE;
RemoveEntryList(&pData->ListEntry);
break;
}
}
KeReleaseSpinLock(&ListLock,OldIrql);

if(Found)
{
return pData;
}
else
{
return NULL;
}


}
返回后,如果不为0,可以call ExFreePool删除

4.Insert

void Insert(PDATA pData)
{
//插入以前,最好先查找,找不到再插入,
KIRQL OldIrql;
KeAcquireSpinLock(&ListLock,&OldIrql);
InsertTailList(&ListHead,&pData->ListEntry);
KeReleaseSpinLock(&ListLock,OldIrql);
}

5.释放链表
DeleteAll()
{
PDATA pData;
KIRQL OldIrql;
KeAcquireSpinLock(&ListLock,&OldIrql);
while(!IsListEmpty(&ListHead))
{
Entry = RemoveHeadList(&ListHead);

pData = CONTAINING_RECORD(Entry,DATA,ListEntry);
ExFreePool(pData); //如果是通过ExAllocatePool分配的,则ExFreePool来释放
}
KeReleaseSpinLock(&ListLock,OldIrql);
}
riceworm
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2008-10-22
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-05-19 10:46
非常感谢zhaock的参与。

同样一个问题osronline上的 Tony Mason,Maxim S.Shatskih,Neal.Christiansen,Daniel,Molly Brown等人会详细的给你解答,帮助你解决问题,在他们看来有些问题太小儿科啦,只是人家心态很正,不像某些人挂著大虾,大拿等等称号,但内心的虚伪,浮躁一览无疑
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-05-19 11:09
非常感谢zhaock的参与。

同样一个问题osronline上的 Tony Mason,Maxim S.Shatskih,Neal.Christiansen,Daniel,Molly Brown等人会详细的给你解答,帮助你解决问题,在他们看来有些问题太小儿科啦,只是人家心态很正,不像某些人挂著大虾,大拿等等称号,但内心的虚伪,浮躁一览无疑
 

对,是披着人皮的狼 :D
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-05-19 11:26
[quote]非常感谢zhaock的参与。

同样一个问题osronline上的 Tony Mason,Maxim S.Shatskih,Neal.Christiansen,Daniel,Molly Brown等人会详细的给你解答,帮助你解决问题,在他们看来有些问题太小儿科啦,只是人家心态很正,不像某些人挂著大虾,大拿等等称号,但内心的虚伪,浮躁一览无疑
 

对,是披着人皮的狼 :D [/quote]
但请看lu0老大置顶的
http://www.driverdevelop.com/forum/html_27609.html?1116473097
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
riceworm
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2008-10-22
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-05-19 11:39
什么样的问题才算是入门问题?入门问题的定义在哪里?lu0老大他又不是神,仰望别人,不如看看自己,不懂装懂没这个必要,论坛就是提出问题,解决问题的地方
riceworm
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2008-10-22
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-05-24 17:52
给分啦
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2005-05-24 18:11
谢了。问题确实很基本,不好意思一下赚了这么多分。楼主还有什么问题,以后回答问题就不用给分了。呵呵
riceworm
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2008-10-22
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-05-25 10:18
我出道时是做Delphi的,后来一直从事Java方面的企业应用,去年年底公司接到一个Windows平台的文件系统的开发工作,临时抽掉到这个开发组做设计,虽然这个项目已经做完了,可是自己的C还是没有捡起来,所以才有此一问。

非常感谢 zhaock 的参与,在这个论坛上有一个不好的风气,眼高手低,问题简单了高手不屑回答,问题有点深度高手又不愿意回答,绝大多数问题都不能得到圆满的回答,更多的人是在忽悠你。



游客

返回顶部