线性链表(单链表)
来源:互联网 发布:node.js 构建工具 编辑:程序博客网 时间:2024/06/03 14:26
/******************************************************************
线性表的单链表存储结构
******************************************************************/
typedef struct LNode{
ElemType data; //结点的数据域
struct LNode*next;//结点的指针域
}LNode, *LinkList;
/******************************************************************
取链表中的某个元素的函数GetElem函数实现
******************************************************************/
Status GetElem_L(LinkList L, int i, ElemType &e){
// L为带头结点的单链表的头指针
// 当第i个元素存在时,其赋值给e并返回OK,否则返回ERROR
p = L->next; j = 1;// 初始化,p指向第一个结点,j为计数器
while( p && j < i){// 顺指针向后查找,直到p指向第i个元素或p为空
p = p->next; ++j;
}
if(!p || j > i) return ERROR;// 第i个元素不存在
e = p->data;// 取第i个元素
return OK;
}//GetElem_L
/******************************************************************
单链表中的插入实现函数ListInsert_L
******************************************************************/
Status ListInsert_L(LinkList & L, int i, ElemType e){
// 在带头结点的单链表L中第i个位置之前插入元素e
p = L; j = 0;
while(p && j < i -1){ p = p -> next; ++j; }// 寻找第i - 1个结点
if( !p || j > i - 1)return ERROR;// i小于1或者大于表长+1
s = (LinkList)malloc(sizeof(LNode));// 生成新结点
s->data = e;s->next = p->next;// 插入L中
p->next = s;
return OK;
} // ListInsert_L
/******************************************************************
单链表中的删除实现函数ListDelete_L
******************************************************************/
Status ListDelete_L(LinkList &L, int i, ElemType &e){
// 带头结点的单链表L中,删除第i个元素,并由e返回其值
p = L; j = 0;
while(p->next && j < i - 1){//寻找第i个结点,并令p指向其前驱
p = p->next; ++j
}
if(!(p->next) || j > i - 1)return ERROR;//删除位置不合理
q = p->next;p->next = q->next;// 删除并释放结点
e = q->data;free(q);
return OK;
} // ListDelete_L
/******************************************************************
从表尾到表头逆向建立单链表的实现CreateList_L
******************************************************************/
int CreateList_L(LinkList &L, int n){// 逆位序输入n个元素的值,建立带表头结点的单链表L
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;// 先建立一个带头结点的单链表
for(i = n; i > 0; i--){
p = (LinkList)malloc(sizeof(LNode));// 生成新结点
scanf(&p->data);// 输入元素值
p->next = L->next; L->next = p;// 插入到表头
}
} // CreateList_L
- 单链表(线性链表)
- 线性链表(单链表)
- (线性表)单链表
- 线性表之链表(单链表)
- 单链表(线性链表)操作
- python 实现线性链表(单链表)
- 数据结构(线性表)-单链表
- 线性表---单链表(逆置)
- 线性表练习(单链表)
- 线性链表 (1)
- 单链表(线性链表)数据元素插入和删除
- 线性表线性(顺序)存储结构
- 线性结构------线性表(一)
- 线性结构------线性表(二)
- 线性表(线性存储结构)
- C#实现单链表(线性表)
- 线性表 -- 链式存储结构(单链表)
- 数据结构学习笔记 --- 线性表 (单链表)
- C#实现网页内容正文抓取
- 一段检查IP地址段是否合法的代码
- 华中科技大学_2005保研___考研计算机_复试上机
- paip.php 5.0 5.3 5.4 5.5 -6.0的新特性总结与比较
- 2014 微软 编程之美 初赛 第一场 题解
- 线性链表(单链表)
- 利用.NET的XML序列化解决系统配置问题
- 关于字符串的反转
- 在.NET 中模拟提交Post数据
- JDK的配置??
- String使用上的安全问题: 为什么在密码问题上char[]优先于String?
- 翻页的WEB控件
- 打印Web的完全技术版
- paip.提高效率---集合的存取括号方式 uapi java python php js 的实现比较