数据结构学习之单向链表的基本操作(非递归实现)
2015-06-18 20:35
1521 查看
【摘要】本文讨论的均为带头结点的线性链表的基本操作,包括创建、删除、插入、打印等等,欢迎大家批评指正错误。
(1)单链表存储结构
(2)创建链表
(3)删除链表
(4)插入数据
(4)删除单个节点
(5)打印数据
(1)单链表存储结构
typedef struct LNode { int data; struct LNode *next; }LinkList;
(2)创建链表
/* 功能:构建一个空的带头节点的单链表*/ Status InitList (struct LNode **L) { (*L) = (struct LNode *)malloc(sizeof(struct LNode)); //产生头节点 if(!*L){ return ERROR; } (*L)->next = NULL;//作为结束标志位 return OK; }
(3)删除链表
/*带头结点链表删除*/ Status ClearList(struct LNode *L)// { LinkList *p,*q; p = L->next; //第一个结点 while(p) { q = p->next; free(p); p = q; } L->next = NULL; //头结点指针域清空 return OK; }
(4)插入数据
/* 在带头节点的单链表L中的第i个位置之前插入元素e*/ Status ListInsert(struct LNode *L,int i,int e) { int j =0; struct LNode *p=L,*s=NULL; while(p && j<i-1) { p=p->next; j++; } if(!p || j>i-1)//没有找到 return ERROR; s = (struct LNode *)malloc(sizeof(struct LNode)); if(!s) printf("malloc error~\n"); s->data = e; s->next = p->next;//插入节点 p->next = s; return OK; }
(4)删除单个节点
/*在带头节点的单链表中删除第i个元素,并有e返回其值*/ Status ListDelete(LinkList *L,int i,int *e) { LinkList *p=L,*q; int j=0; while(p->next && j< i-1) { 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; }
(5)打印数据
/* 依次对L的每个元素打印输出数据*/ Status ListTraverse(struct LNode *L,void (*vi)(int)) { LinkList *p = L->next; //第一个结点 while(p) { printf("%d\n", p->data); p = p->next; } printf("\n"); return OK; }
相关文章推荐
- OpenCV基础篇之Mat数据结构
- 温习一下数据结构
- 数据结构与算法-----双向线性链表
- 数据结构上机实验之二分查找
- 数据结构上机实验之二分查找 分类: 查找 2015-06-18 17:27 9人阅读 评论(0) 收藏
- 数据结构与算法分析 L6
- 数据结构实验之队列一:排队买饭
- 数据结构实验之队列一:排队买饭 分类: 栈和队列 2015-06-18 17:16 14人阅读 评论(0) 收藏
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配 分类: 栈和队列 2015-06-18 17:06 13人阅读 评论(0) 收藏
- 简单数据结构之栈(C++模板库实现)
- 算法基础----关于数据结构中图的相关算法总结探究
- 数据结构与算法-----队列-使用数组(顺序结构)实现
- 算法基础----关于数据结构中树的相关算法总结探究
- [数据结构]线性表之单链表的类模板实现
- 数据结构——链表(c++)
- 数据结构 -- 树
- 数据结构——顺序表(c++)
- 数据结构与算法分析 L5
- Java-数据结构与算法-选择排序与冒泡排序