严蔚敏 数据结构代码c语言

2024-02-12 16:36

本文主要是介绍严蔚敏 数据结构代码c语言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

P20 例2-1,合并线性表(1)

将所有Lb中但不在la中的数据元素插入到La中

void union (List &La,List Lb){//将所有Lb中但不在la中的数据元素插入到La中La_len =ListLength(La);Lb_len =ListLength(Lb);//求线性表的长度for(i=1;i<=Lb_len;i++){GetElem(Lb,i,e);//取线性表b第i个元素赋值给e if(!LocateElem(La,e,equal))//如果线性表a中不存在和e相同的数据元素 ListInsert(La,++La_len,e);//插入操作 } 
}

P21 例2-2 合并线性表(2)

归并La和Lb得到新的线性表Lc, Lc中的数据元素按值非递减排列 

void MergeList (List La,List Lb,List &Lc){//已知线性表La和Lb中的数据元素按值非递减排列 //归并La和Lb得到新的线性表Lc, Lc中的数据元素按值非递减排列 InitList(Lc);i=j=1;k=0;La_len =ListLength(La);Lb_len =ListLength(Lb);//求线性表的长度while((i<=La_len)&&(j<=Lb_len)){//La和lb均非空 GetElem(La,i,ai);//取线性表a第i个元素赋值给ai GetElem(Lb,j,bj);//取线性表b第j个元素赋值给bj if(ai<=bj){ListInsert(Lc,++k,ai);//在线性表lc的第++k个元素之前插入新的元素++i;      }else{ ListInsert(Lc,++k,bj);//++j;}}while(i<=La_len){GetElem(La,i++,ai);ListInsert(Lc,++k,ai);}while(j<=Lb_len){GetElem(Lb,j++,bj);ListInsert(Lc,++k,bj);}}/*如果在主循环结束后,`La` 中还有剩余元素,那么这个循环会将它们全部插入到 `Lc` 中。同样,如果 `Lb` 中还有剩余元素,也会将它们插入到 `Lc` 中时间复杂度=O(LA+LB)*/	

P22   算法2-3线性表初始化定义

#define LIST_INIT_SIZE 100//初始分配量 
#define LISTINCREMENT  10
typedef struct {ElemType *elem;//数组指针 线性表的基地址 int length;//线性表的当前长度, int listsize;//线性表最先分配的存储空间 
}SqList;Status InitList_Sq(SqList &L)
//构造一个线性表L{L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(! elem) exit(OVERFLOW);//存储分配失败L.length = 0;//空表的长度为零 ,目的是分配一个预定义大小的数组空间 L.listsize = LIST_INIT_SIZE;return OK; }//初始化 

P24 算法2-4 线性表的插入

Status ListInsert_Sq(SqList &L,int i,ElemType e) {if(i<1||i>L.length+1) return ERROR;  //插入位置不合理 if(L.length>= L.listsize) {//如果列表的长度已经达到了当前分配的内存大小,就会通过 `realloc` 函数重新分配内存。newbase =(ElemType*)realloc(L.elem,(L.list.size+LISTINCREMENT)*sizeof(ElemType));if(!newbase) exit(OVERFLOW);L.elem = newbase;L.listsize +=LISTINCREMENT;//新的内存大小是原来的大小加上一个增量 `LISTINCREMENT`。//如果重新分配内存失败(返回 `NULL`),则程序会退出并标记为 `OVERFLOW`。//如果成功,将新的内存地址赋值给 `L.elem`,并增加 `L.listsize`。}q=&(L.elem[i-1]);//获取插入位置前一个元素的指针 `q`。for(p=&( L.elem[L.length-1] );p>=q ; --p  ) //通过一个循环将从最后一个元素开始到`q`(包括 `q`)的所有元素向后移动一个位置,为插入新元素腾出空间。*(p+1)=*p;*q=e;  //扎入e ++L.length;  //长度+1 return OK;}

p24 算法2-5线性表的删除

Status ListDelete_Sq(SqList &L,int i,ElemType &e){if(i<1||i>L.length) return ERROR;  //删的位置不合理p=&(l.elem[i-1]);//获取要删除元素的指针 `p`e=*p;//将该元素的值赋值给变量 `e`,以便后续使用或存储。q=L.elem+L.length-1;//设置一个指针 `q` 指向列表的最后一个元素。for(++p;p<=q;++p)  *(p-1)=*p; //通过一个循环,将从 `p`(包括 `p`)到 `q` 的所有元素向前移动一个位置,覆盖要删除的元素。--L.length;return OK;}

这篇关于严蔚敏 数据结构代码c语言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/703055

相关文章

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim