线性单链表 初始化 插入 取出 头插法 合并升序排列
来源:互联网 发布:java四种访问修饰符 编辑:程序博客网 时间:2024/06/08 08:18
#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 struct LNode{ //封装一个线性单链表 ElemType data; //数据域 struct LNode *next; //指针域}LNode, *LinkList;//类型重定义struct LNode为Lnode,类型重定义 Lnode的*指针 为LinkListStatus InitList_L(LinkList &L) { //初始化线性链表 L = (LinkList)malloc(sizeof(LNode)); //新开辟内存,返回指针L L->next = Null;//L->//对于指针p p->a 被定义为 (*p).a (不成文的标准) return TRUE;}Status GetElem_L(LinkList L,int i,ElemType &e){ //取出元素,i是序号,e为值 //L为带头结点的单链表的头指针 //当第i个元素存在时,将值返回给e,返回TRUE, 否则FALSE p = L->next; j = 1;//初始化,p指向第一个结点,j为计数器 while (p && j<i) { //p指针非空,j计数器<i,所以循环的终点是i p = p->next; ++j;//指针后移一个,计数器+1一个 } if (!p || j>i) return FALSE;//第i个元素不存在 e = p->data;//取出第i个元素,值为e return TRUE;}//GetElem_LStatus ListInsert_L(LinkList &L, int i, ElemType e) { //在带head的单链表L中第i个位置之前插入元素e p = L; j = 0;//p为指针,被插入的previous Node while (p && j < i - 1) { p = p->next; ++j; }//寻找第i个结点,指针下移,j最后停在i if (!p || j>i) return FALSE; s = (LinkList)malloc(sizeof(LNode));//生成新节点,开辟内存空间 返回指针s,insert s->data = e;//s->data域的赋值 assignment s->next = p->next;//指针操作 ,=右往左,指针 指向 p->next = s;}Status ListDelete_L(LinkList &L, int i, ElemType &e) { //在带head的单链表L中第i个位置 删除元素e p = L; j = 0;//p为指针,被插入的previous Node while (p && j < i - 1) { p = p->next; ++j; }//寻找第i个结点,下标最后是i-1,指针下移,j最后停在i if (p->next || j>i - 1) return FALSE;//删除位置不合理 q = p->next; //q是被删除的节点 p->next = q->next;//P的next,指向q->next e = q->data; //取出 值为e free(q);//返回值,释放空间}LNode * LocateElem_L(LinkList L, ElemType e) { //在L中找到第一个值和e相同的结点,返回其地址,若不存在,返回空值NULL。 if (!L) return NULL; p = L; while (p&&p->data != e) { p = p->next };//if(!p) p=null; return p;//时间复杂度O(n)}void CreateList_L(LinkList &L, int n) { //头插法 生成单链表 逆序初始化 //逆位序输入n个元素的值,建立带表头结点的单链线性表L L = (LinkList)malloc(sizeof(LNode)); L->next = NULL;//L->next表示头结点的指针,先建立一个带头结点的单链表 for (i = n; i > 0; --i) { p = (LinkList)malloc(sizeof(LNode)); scanf(&p->data);//输入元素值 p->next = L->next;//挪动 头指针的后继 L->next = p;//挪动 头指针的后继 }}void MergeList_L(LinkList &La, LinkList &Lb,) { //已知La和Lb升序排列 //合并得到新的单链表Lc,Lc的元素也按值非递减排列 pa = La->next; pb = Lb->next; q = La;//存放临时指针,q就是pa的前驱元素,q必须始终作为pa的前驱元素 while (pa && pb) { if (pa->data <= pb->data) {//如果小于=,pc指针指向pa q = pa;//q下移 pa = pa->next;//pa下移 } else {//如果>,pc指针指向pb t = pb;// t 下移 pb = pb->next;//pb下移 t->next = pa;//t插入pa的前面 q->next = t; q = t;//q必须始终作为pa的前驱元素,因此t赋值给q }//2个结合起来就是小者排前面,这个代码写的真差,不是人类看的,因为C在A和B只见跳来跳去,临时pc变量拆成2个就容易理解了 } if (pb) q->next = pb;}//MergeList_L
0 0
- 线性单链表 初始化 插入 取出 头插法 合并升序排列
- 数据结构中线性表的基本操作-合并两个线性表-按照元素升序排列
- 合并两个升序线性链表
- 单链表升序合并
- 单链表 初始化 创建 头插法 尾插法 插入 删除 查找 合并 长度
- 将一个升序排列的单链表和一个降序排列的单链表合并成一个升序排列的单链表(优酷土豆2014校园招聘笔试题)
- 将两个升序排列的单链表合并为一个降序排列的单链表且不增加新的结点
- YTU-OJ-单链表(线性表)-合并两个升序链表后降序输出
- C语言合并两个带头节点升序排列链表
- 向升序排列的单链表中插入一个值,要求插入后仍为升序链表
- 线性表初始化、判空、插入、删除、遍历、修改、查值、合并
- 线性表 初始化 插入 删除
- 将两个升序排列的链表合并后升序排序打印.
- 已知两个线性升序表LA,LB,然后合并两个表为LC,并保持升序
- 取出整型数据中存在指定整数的数据,并按照升序排列返回
- 线性表a、b为两个有序升序的线性表,编写一程序,使两个有序线性表合并成为一个有序升序线性表h
- 线性表的插入,删除,合并,查找
- 线性表初始化、插入、删除操作
- java 蓝桥杯 趣味算式
- 【10天轻松掌握C语言】2、C语言必备基础知识
- thinkphp 中的伪静态问题,不同环境下的伪静态写法
- MongoDB学习(六)数据库的备份、还原、导入及导出
- <jsp:include>和<%@include%>的区别
- 线性单链表 初始化 插入 取出 头插法 合并升序排列
- Spring事务的传播行为,每个传播行为的区别 ;Spring 事务的隔离性,每个隔离性的区别
- 为什么java Hashmap 中的加载因子是默认为0.75
- 本文将介绍如何搭建服务器
- 数据库连接:操作数据增删改查
- VS2013中添加继承自Qt的类时提示没有moc_xxx.cpp
- Wordpress函数大全
- 利用反射操作泛型
- Java.lang.reflect简单讲解