链表的创建头插法和尾插法(有无头节点)
来源:互联网 发布:如何做人力资源矩阵图 编辑:程序博客网 时间:2024/06/07 23:54
结构声明
typedef int ElementType;typedef struct Node { ElementType data; struct Node *Next;} *List;
头插法(有头节点)
/* 建立链表 - 头插法 - 有头节点 +------+ +------+ +------+ +------+ | head | => |node_1| -> |node_2| -> |node_3| -> NULL +------+ +------+ +------+ +------+ \ / +------+ | p | +------+*/List HeadCreate(void){ ElementType x; // 保存 Node 中的 data 数据 List p; // 临时指针,用于保存声明的节点 List head; // 整个链表的头结点; head = (List)malloc(sizeof(struct Node)); head->Next = NULL; head->data = 0; // 头节点的 data 域用于保存链表的长度 scanf("%d", &x); while (x != -1) { // 当 x 等于 -1 的时候,停止创建链表 p = (List)malloc(sizeof(struct Node)); p->data = x; p->Next = head->Next; head->Next = p; head->data++; // 链表的长度加 1 scanf("%d", &x); // 读取下一个节点的数据 } return head;}
头插法(无头节点)
/* 建立链表 - 头插法 - 没有头节点 +------+ +------+ +------+ +------+ | head | -> |node_1| -> |node_2| -> |node_3| -> NULL ^ +------+ +------+ +------+ +------+ | +------+ | p | +------+*/List HeadCreate(void){ ElementType x; // 保存 Node 中的 data 数据 List p; List head; head = NULL; scanf("%d", &x); while (x != -1) { p = (List)malloc(sizeof(struct Node)); p->data = x; if (head == NULL) { // 若第一次创建节点,则将该点设置为头节点 head = p; p->Next = NULL; } else { // 若不是第一次创建节点,则直接将新节点接到链表头 p->Next = head; head = p; } scanf("%d", &x); } return head;}
尾插法(有头节点)
/* 创建链表 - 尾插法 - 有头节点 +------+ +------+ +------+ | head | -> |node_1| -> |node_2| ____ +------+ +------+ +------+ | v +------+ +------+ | rear | -> | p | +------+ +------+*/List TailCreate(void){ ElementType x; // 保存 Node 中的 data 数据 List p; List head; // 头结点 List rear; // 因为尾插法需要在尾部插入,所以要有个指针来保存尾的位置 head = (List)malloc(sizeof(struct Node)); head->Next = NULL; rear = head; // 链表为空,头和尾指向同一个位置 scanf("%d", &x); while (x != -1) { p = (List)malloc(sizeof(struct Node)); p->data = x; rear->Next = p; rear = p; } rear->Next = NULL; // 链表建立结束后将最后一个节点指向 NULL return head;}
尾插法(无头节点)
/* 创建链表 - 尾插法 - 没有头节点 +------+ +------+ +------+ |node_1| -> |node_2| -> |node_3| ____ +------+ +------+ +------+ | v +------+ +------+ | rear | -> | p | +------+ +------+*/List TailCreate(void){ ElementType x; List p; List head; List rear; head = NULL; rear = NULL; scanf(%d, &x); while (x != -1) { p = (List)malloc(sizeof(struct Node)); p->data = x; if (head == NULL) { // 创建链表的第一个节点 head = p; rear = p; p->Next = NULL; } else { rear->Next = p; rear = p; } scanf("%d", &x); } rear->Next = NULL; // 链表建立结束后将最后一个节点指向 NULL(尾插法中不要遗漏) return head;}
阅读全文
1 0
- 链表的创建头插法和尾插法(有无头节点)
- 判断链表是否有环的两种方式和创建有无环的方法
- 链表的头结点和尾节点的用处
- 初始化链表的四种方法(有无头结点以及表头(尾)插入法)
- 单链表中头结点的有无. 并讨论下有无头结点在单链表的创建,打印,插入,逆置,删除中的区别.
- 有/无头节点的单链表的创建(尾插法)
- 链表中的头指针和头节点
- 考研数据结构与算法(3)----有头节点和尾节点的链表
- 考研数据结构与算法(4)----有头节点和尾节点的链表
- 链表创建之无头节点非空链表
- 链表创建之有头节点空
- 头节点链表
- 约瑟夫问题(没有头节点的循环链表)
- C++双向链表的建立(无头节点)
- 无头节点,删除已知节点的前驱(循环链表)
- 检查SQLSERVER有无创建表或存储过程的方法
- 交换单向链表的头结点和第n个节点
- 头节点循环链表
- 电梯测试用例设计
- Just a Hook(线段树 )
- Ajax用法
- sqoop1.4.6安装配置
- webpack-pages
- 链表的创建头插法和尾插法(有无头节点)
- java再学习(菜鸟上路)
- C语言实现在字符串中插入空格
- 统计一个整数的二进制中1的个数.
- 什么是解释型语言,什么是编译型语言?
- JavaScript循环语句和分支语句
- ORACLE数据库调整表字段顺序
- C++中的内存 堆 栈 全局变量 类
- Lock和synchronized的比较