数据结构-静态链表的实现
来源:互联网 发布:java list filter 编辑:程序博客网 时间:2024/05/22 10:58
好久没来了,公司不让上网,太不爽了,赶着这次机会,把以前弄的静态链表的实现写上吧,希望对大家有帮助(只是做了简单的实现,其中的出错处理没有完善,请见谅!)
#include <stdio.h>
#define MAXSIZE 21
struct Node
{
int key;
int link; //存储下一结点的下标
};
struct List
{
struct Node r[MAXSIZE];
int len;
};
void print(List *l)
{
int next = l->r[0].link;
printf("List nodes key as this:/n");
while (next != 0)
{
printf("%4d", l->r[next].key);
next = l->r[next].link;
}
printf("/n");
}
//静态链表的初始化
void initList(List *l)
{
//r[0]作为头结点
l->len = 0;
l->r[0].link = 0;
}
//头插法
void insertNodeAtHead(List *l, int n)
{
int next = l->r[0].link;
l->len = l->len + 1;
l->r[l->len].key = n;
l->r[l->len].link = next;
l->r[0].link = l->len;
}
//尾插法
void insertNodeAtTail(List *l, int n)
{
int pre = l->r[0].link;
int next = pre;
l->len = l->len + 1;
while (next != 0)
{
pre = next;
next = l->r[next].link;
}
l->r[l->len].key = n;
l->r[l->len].link = 0;
l->r[pre].link = l->len;
}
/************************************************************************/
/* 删除链表中值为n的结点,这里假设n是一定存在的,没有作异常处理 */
/************************************************************************/
void deleteNodeByN(List *l, int n)
{
int pre = l->r[0].link;
int next = l->r[pre].link;
int key = l->r[next].key;
while (n != key)
{
pre = next;
next = l->r[next].link;
key = l->r[next].key;
}
l->r[pre].link = l->r[next].link;
l->len = l->len - 1;
}
//删除第index个结点
void deleteNodeAtIndex(List *l, int index)
{
if (index > l->len || index < 1)
{
printf("'index' is not legal/n");
return;
}
int i = 1;
int pre = 0;
int next = l->r[pre].link;
while (i < index)
{
pre = next;
next = l->r[next].link;
}
l->r[pre].link = l->r[next].link;
l->len = l->len - 1;
}
void main()
{
int i;
List list;
initList(&list);
for (i = 0; i < 9; i++)
{
insertNodeAtHead(&list, i+1);
}
for (;i < 18; i++)
{
insertNodeAtTail(&list, i+1);
}
print(&list);
printf("after delete a numeric:/n");
deleteNodeByN(&list, 1);
print(&list);
printf("after delete No.1 numeric:/n");
deleteNodeAtIndex(&list, 1);
print(&list);
}
链表在初始化的时候,先用头插法到9,再用尾插法到18。
删除的结果:
- 数据结构-静态链表的实现
- 数据结构实现静态链表
- 【数据结构与算法】静态链表的游标实现
- (数据结构第二章)静态链表的实现
- 常用数据结构-数组实现静态链表
- 【数据结构】静态链表
- 数据结构:静态链表
- 数据结构-静态链表
- 【数据结构】静态链表
- 数据结构:静态链表
- 数据结构:静态链表
- 数据结构--静态链表
- 数据结构-静态链表
- 数据结构线性表—静态顺序表的实现
- 数据结构 静态链表的建立
- 数据结构 静态链表的应用
- 数据结构-静态链表的模型
- 数据结构3:线性表的静态链表的表示和实现
- oracle ASM 配置
- 正则基础之——NFA引擎匹配原理
- Linux进程控制编程之守护进程
- 【非参数贝叶斯学习系列】Beta Distribution 学习笔记
- MongoDB下的查询操作(与上篇文章java api查询操作对应)
- 数据结构-静态链表的实现
- SQL Server临时表(转) (转自:http://blog.csdn.net/zh520/archive/2009/04/17/4087943.aspx)
- android学习笔记1_LinearLayout and weight
- 为什么要将一个父类的析构函数写成一个虚函数,和内存泄漏有关,怎么理解?
- 一生
- css 的@media print控制打印
- 【转】玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest
- QT2.2.0环境的搭建
- physical rowid and logical rowid