单链表
来源:互联网 发布:js delete 编辑:程序博客网 时间:2024/06/05 15:02
1)单链表的定义
typedef struct Lnode {int data;Lnode *next;}*Linklist;注意c++中结构体定义与c的区别,以上*Linklist为struct Lnode的别名
要使用结构体需要先定义对象 Linklist s1; s1->data=5;
上述定义若写成
typedef struct {int data;Lnode *next;}Lnode;则Lnode就是结构体的对象,可直接使用 Lnode.data=5。
另外c中结构体指针next前需加struct ,c++不需要
2)单链表初始化
正确写法一:void initial_list(linklist &L) {L=new lnode;L->next=NULL;}调用 linklist s1;initial_list(s1);
<pre name="code" class="cpp">正确写法二:void initial_list(linklist *L) {*L=new lnode;(*L)->next=NULL;}调用 linklist s1;initial_list(&s1);
错误写法:void initial_list(linklist L) {L=new lnode;L->next=NULL;}调用 linklist s1;initial_list(s1);
L申请内存后本身会发生变化,需要用指针或者引用传递,错误写法中指针为传值调用,初始化出错。
3)单链表头插法插入节点
void insert_head(Linklist L,int x) //头插法插入节点,每个节点都插在头结点后面,x为插入数据{ //因为插入前后头指针L无变化,所以直接传值Linklist s=new Lnode;s->data=x;s->next=L->next;L->next=s;}
注意区分头指针,头结点,首元结点
L为头指针,本质为指针,本身并没有申请节点空间
L->data为头结点的数据域,一般里面没有有效值
L->next为头结点指针域,存放的地址为下一个节点即首元结点的地址
4)单链表尾插法插入节点
void insert_tail(Linklist L,int x){Linklist s=new Lnode;Linklist tail=L;while(tail->next)tail=tail->next;s->data=x;s->next=NULL;tail->next=s;}
5)向有序单链表中的合适位置插入节点
void insert(Linklist L,int i){Linklist p=L; //p为待插入位置的前驱结点Linklist s=new Lnode;while(p->next && i>p->next->data ) //寻找p的正确位置,p->next为NULL时即p来到最后一个节点,在p后插入{p=p->next;} s->next=p->next;p->next=s;s->data=i;}
0 0
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- cout < < __FILE__ < < __LINE__ < < __FUNCTION__ < < endl
- HDU 5001 概率DP || 记忆化搜索
- C语言程序学习(八)笔记
- 我在这里公务员在线模拟考试系统-分达教育做公务员模拟题
- STL algorithm算法make_heap和sort_heap(32)
- 单链表
- 软件性能测试基础
- Android中View转换为Bitmap及getDrawingCache=null的解决方法
- python系列之数据处理编程实例
- 体验安装金蝶K/3 Wise 13.0(图文)
- 原来泛型很简单
- js 复制到剪贴板--ZeroClipboard 2.0
- 整数数组的组合问题
- HDU 5006 Resistance 物理 高斯消元