链表初始化总结

顺序表:

声明:struct seqlist

{

Int last;

Int data[12];

}seq,*seqlist;

初始化

seqlist init_seqlist()

{

seqlist sl = malloc(sizeof(seq));

sl->last =-1;//标记位,用于判断是表头还是表尾

return sl;

}

插入操作(判断是否满,定位,移位(从后开始移),插入);

删除操作(判断是否为空,定位,移位,从定位的位置开始移);

------------------------

单链表:

声明:typedef struct node

{

lnt data;

struct node *next;

}listnode,*linklist;

初始化:

  1. 不带表头:

linklist init_list()

{

linklist L = NULL;

return L;

}

  1. 带表头(较常用)

linklist init_list()

{

linklist L =malloc(sizeof(listnode));

L->next =NULL;

return L;

}

插入操作(产生一个新节点,定位,插入新节点)

删除操作(判断是否为空,定位,删除节点)

反转操作:

linklist p,q;

p=L->next;

L->next = NULL;//将链表断开

while(p!=NULL)

{

q = p->next;

p->next = L->next;

L->next = p;不断在L的后面循环插入p及p的下个节点

p = q;

}

----------------------------------------

单向循环链表:

声明:typedef struct node

{

int data;

struct node *next;

}listnode,*linklist;

初始化:

  1. 不带头

linklist init_list()

{

linklist L =NULL;

return L;

}

  1. 带头节点

linklist init_list()

{

linklist L =malloc(sizeof(listnode));

L->next = L;

return L;

}

不带头,插入操作(产生新节点,判断是否为空,如果为空*l = new,new->next=new,否则插入节点)注意因为有对l操作,所以注意取地址。Linklist l 是个变量而不是指针,只有*l才是指针。

删除操作(类似于单链表);

-------------------------------

双向循环链表:

声明:

typedef struct node()

{

int data;

struct node *next,*prve;

}linknode,*linklist;

初始化:

linklist init_list()

{

linklist L = malloc(sizeof(listnode));

L->next = L;

L->prve = L;

return L

}

插入操作:(产生新节点,定位,插入)

尾部插入,中间插入只需将L改成p;

new->n=L;

new->p = L->p;

L->p->n = new;

L->p=new;

删除操作:

p0->p->n = p0->n;

p0->n->p = p0->p;

p0->n = p0->p = NULL;

奇偶排序:将以上两个结合。注意记录q=p->prev;方便节点向前移;

内核链表:类型无关的双向循环链表。(内核链表节点包含在宿主节点中):

时间: 2024-10-12 20:06:57

链表初始化总结的相关文章

静态链表 初始化 定位 Malloc Free 插入 删除

#include <stdio.h> #include <stdlib.h> #define OK 1 #define TRUE 1 #define ERROR -1 #define FALSE -1 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define MAX_SIZE 1000;//表最大空间 /* //线性表的基本操

单链表 初始化 创建 头插法 尾插法 插入 删除 查找 合并 长度

#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE -1 #define NULL 0 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define LEN sizeof(LNode) #

线性单链表的初始化、插入、删除功能实现

1 ////////////////////////////////////////////////////////// 2 // singlelist.cpp 3 // 4 // author:Leetao 5 ////////////////////////////////////////////////////////// 6 // 简介: 7 // 线性链表的实现 8 ////////////////////////////////////////////////////////// 9

java-------单链表

单链表: * 1.链表可以是一种有序或无序的列表 * 2.链表的内容通常存储在内存中分散的为止 * 3.链表由节点组成,每一个节点具有相同的结构 * 4.节点分为数据域和链域,数据域存放节点内容,链域存放下一个节点的指针 package myLinkList; public class MyLinkedList<T> { /** *Node:节点对象 * 包括数据域data和链域next(指向下一个节点对象) */ class Node { private T data; private No

Linux内核数据结构——链表

目录 目录 简介 单向链表 双向链表 环形链表 Linux内核中的链表实现 offsetof container_of container_of 第一部分 container_of 第二部分 链表初始化 向链表中增加一个节点 删除节点 移动节点 判断链表是否为空 遍历链表 Demo测试 mlisth mlistc 执行结果 简介 最近在学习Android Binder驱动程序实现的时候,发现里面的数据结构用到了struct list_head.而我google发现struct list_head

关于链表的一个小程序

关于链表的一个小程序: /**************************链表*****************************//* 具备功能 *//* 链表按元素位置插入 *//* 链表按元素位置删除 *//* 链表全表遍历 *//* 链表整表创建(头插法) *//* 链表整表创建(尾插法) *//* 链表整表删除 *//**************************链表*****************************/ #include<stdio.h>#in

数据结构(C语言版)链表相关操作算法的代码实现

这次实现的是带头结点的单链表的初始化.遍历.创建.插入.删除.判断链表是否为空.求链表长度函数,编译环境是vs2013. 其中插入和删除函数中循环的条件目前还不太明白. #include<iostream> using namespace std; typedef int Status; typedef char Elemtype; //定义链表的存储结构,注意这里与算法的定义有一处不同,是定义结构体时就命名Lnode,说明*next的类型只要说是Lnode类型就可以 typedef stru

链表详解

转载自http://www.cnblogs.com/lifuqing/archive/2011/08/20/List.html 十分感谢作者 ? #include "stdafx.h" #include "stdio.h" #include <stdlib.h> #include "string.h" typedef int elemType ; /*******************************************

深入分析Linux内核链表

1. 普通单链表 2. 内核链表 上图是本人从其他博客盗来的,差点被糊弄过去. 下图是本人自己用KeyNote画的(唉!!画图真的是让人心好累啊!!). 差异是不是很明显啊?! Read The Fucking Source Code 1. 初始化 /* include/linux/types.h */ struct list_head { struct list_head *next, *prev; }; /* include/linux/list.h *//*××××××××××××××××