ison
IT博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
19 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks
<
2008年12月
>
日
一
二
三
四
五
六
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
公告
我是做数码相机软件设计的,欢迎和大家一起学习讨论。 E-mail:ison.ky.liang@sony.com.cn
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
2009年3月 (1)
2009年1月 (1)
2008年12月 (10)
2008年9月 (5)
2008年6月 (2)
搜索
最新评论
阅读排行榜
1. Nand Flash在u-boot的读写实现 (1764)
2. FLASH的读写(2)(1379)
3. 链表增删查改(724)
4. FLASH的读写(1)(578)
5. u-boot-1.2.0中nand flash读写操作(470)
评论排行榜
1. u-boot启动过程分析——基于lpc2210的移植代码(0)
2. linux和windows(0)
3. FLASH的读写(1)(0)
4. FLASH的读写(2)(0)
5. FLASH的读写(3)(0)
链表增删查改
创建链表、遍历链表、查找节点、添加节点、删除节点
#include "stdio.h"
#include "string.h"
#include "assert.h"
#include "stdlib.h"
#include "windows.h"
#define COUNT 3
struct NODE//定义一个节点结构体
{
unsigned long uID;
char strName[16]; //用指针的话会出访问冲突异常
NODE *next;
};
//创建一个具有n个节点的链表,从键盘输入数据将其初始化,并返回链表的首节点指针
NODE *createNode(int n)
{
NODE *pHead, //首节点指针
*pRear, //尾节点指针
*pNew; //新节点指针
int i;
char *strName = new char[16];
for (i=0; i<n; i++)
...{
pNew = new NODE;
do
...{
printf("请输入ID和名称: ");
scanf("%d %s",&pNew->uID, strName);
if (strlen(strName) > 16)
...{
printf("输入名称长度超出范围,请重新输入: ");
Sleep(1000);
}
} while(strlen(strName) > 16);
strcpy(pNew->strName, strName);
if (0==i)
...{
pRear = pHead = pNew;
}
else
...{
pRear->next = pNew;
}
pNew->next = NULL;
pRear = pNew;
}
delete []strName;
return pHead;
}
//打印链表中所有节点的数据
void printNode(NODE *pHead)
...{
NODE *pTemp = pHead;
assert(pTemp != NULL);
while (pTemp != NULL)
...{
printf("%d %s ",pTemp->uID, pTemp->strName);
pTemp = pTemp->next;
}
}
//查询链表中具有指定ID的节点,并返回此节点指针
NODE *searchNode(NODE *pHead, unsigned long uID)
...{
NODE *pDest = pHead;
assert(pDest != NULL);
while (pDest->next!=NULL && pDest->uID!=uID)
...{
pDest = pDest->next;
}
if (pDest->uID == uID)
...{
return pDest;
}
else
...{
printf("搜索失败,未找到找定ID的节点! ");
return NULL;
}
}
//删除指定ID的节点
NODE *deleteNode(NODE *pHead, unsigned long uID)
...{
NODE *pDest, //要删除的节点
*pBefore; //前一个节点
pDest = pHead;
assert(pDest != NULL);
while (pDest->next!=NULL && pDest->uID!=uID)
...{
pBefore = pDest;
pDest = pDest->next;
}
if (pDest->uID == uID)
...{
if (pDest == pHead)
...{
pHead = pDest->next;
}
else
...{
pBefore->next = pDest->next;
}
free(pDest);
printf("节点已被删除! ");
}
else
...{
printf("未找到指定节点,无法将其删除! ");
}