首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

数据结构实验2.zip

行业研究 4.14KB 17 需要积分: 1
立即下载

资源介绍:

数据结构实验2.zip
#define OVERFLOW -1 #define OK 1 #define ERROR 0 #define TRUE 1 #define FLASE 0 #include #include #include //用于内存分配 typedef int Status; //int 类型的别名 typedef int ElemType; //int 类型的别名 typedef struct LNode { ElemType data; //数据域 struct LNode* next; //指向下一个节点的指针 } LNode,*LinkList; //LinkList 是指向链表节点的指针 /* CreatLinkL1:创建带有头结点的单链表 LinkList &L:指向链表的指针(使用引用传递,允许函数修改传入的指针)。 int n:表示需要创建的链表元素数量。 ElemType *E:是一个指向元素的指针,用于存储需要添加到链表中的数据。 */ Status CreatLinkL1(LinkList &L,int n,ElemType *E) { // int i; LinkList p; //指向链表节点的指针 p L=(LinkList) malloc(sizeof(LNode)); //分配了一个新的节点内存空间,malloc(sizeof(LNode)) 分配了一个节点大小的内存,然后将其地址赋值给 L,即链表的头结点。 if(!L) return ERROR; //检查分配内存是否成功,函数返回 ERROR,表示创建链表失败。 L->next=NULL; //将头结点的 next 指针设置为 NULL,因为目前链表中没有其他节点。 for(i=n-1; i>=0; --i) { //用循环逆向遍历数组 E 中的元素,准备创建链表节点 if(!(p=(LinkList)malloc(sizeof(LNode)))) //分配新的节点内存空间 return ERROR; p->data=E[i]; //将节点 p 的 data 域赋值为数组 E 中相应位置的元素值。 //*********************************----------1------------- p->next=L->next; //将节点 p 的 next 指向当前链表的第一个节点,即头结点 L 的 next 指针所指向的位置(在第一次循环时为 NULL)。 //**************************************************-----------------2------------------ L->next=p; //将新节点 p 插入到链表的头部,使头结点指向它,成为新的第一个节点。 } return OK; //若所有节点创建成功,函数返回 OK,表示创建链表成功 } /* 链表创建函数,采用尾插法来建立带有头结点的单链表 LinkList &L:指向链表的指针(使用引用传递,允许函数修改传入的指针)。 int n:表示需要创建的链表元素数量。 ElemType *E:是一个指向元素的指针,用于存储需要添加到链表中的数据。 */ Status CreatLinkL2(LinkList &L,int n,ElemType *E) { //用表尾插入法建立带头结点的单链表 int i; LinkList p,r; //声明两个指向链表节点的指针 p 和 r。 L = (LinkList)malloc(sizeof(LNode)); //分配一个新的节点内存空间,地址赋值给 L,即链表的头结点 if(!L) return ERROR; //检查分配内存是否成功 r=L; //初始化尾指针 r,让其指向头结点,因为初始时头结点就是最后一个节点。 for(i=0; idata=E[i]; //将节点 p 的 data 域赋值为数组 E 中相应位置的元素值。 r->next=p; //让当前尾节点 r 的 next 指针指向新节点 p,即将新节点插入到表尾。 //******************************----------------3---------------- r=p; //更新尾指针 r,将其指向新的表尾节点 p。 //******************************----------------4---------------- } r->next=NULL; //将最后一个节点的 next 指针设为 NULL,表示链表的结束。 return OK; //若所有节点创建成功,函数返回 OK,表示创建链表成功。 } //在带有头结点的单链表 L 中的第 i 个位置之前插入元素 e。 Status InsertLinkL(LinkList &L, int i, ElemType e) { LinkList s, p=L; int k=0; //初始化,p指向头结点,用于遍历,k为计数器 while(p->next!=NULL && knext; ++k; } if(!p->next||k>i-1) return ERROR; //定位插入点失败 if(!(s=(LinkList)malloc(sizeof(LNode)))) //申请元素e的结点空间 return OVERFLOW; //内存无空闲单元,无法申请到空间 s->data=e; //将新节点 s 的数据域赋值为要插入的元素 e s->next = p->next; //将新结点s插入到链表中 //******************************----------------5---------------- p->next = s; //将第 i-1 个元素指向新节点 s,完成节点的插入操作 //******************************----------------6---------------- return OK; } //按照位置删除节点 Status Del_LinkL1(LinkList L,int i,ElemType &e) { int k=0; LinkList q,p=L; while(p->next!=NULL&&knext; ++k; } if(!p->next||k>i-1) return ERROR; //如果未找到要删除节点的前一个位置或者超出链表范围,则返回 ERROR q=p->next; //将 q 指向待删除节点,即第 i 个位置的节点 p->next = q->next; //将第 i-1 个节点指向待删除节点的下一个节点,从而跳过待删除节点 //******************************----------------7---------------- e=q->data; //将待删除节点中的数据保存在 e 变量中,以便外部代码可以访问被删除的节点值 free(q); //释放待删除节点 q 所占用的内存空间,完成节点的删除操作 return OK; } //按照值删除节点。大致内容同上,保姆累了 Status Del_LinkL2(LinkList &L,ElemType e) { LinkList p,q; p=L; q=L->next; while(q != NULL && q->data != e) { //******************************----------------8---------------- p=q; q=q->next; } if(q==NULL) return ERROR; p->next=q->next; free(q); return OK; } //按照值删除节点,并删除所有匹配值的节点。用于删除链表 L 中数据域为 e 的节点。 Status Del_LinkL3(LinkList &L,ElemType e) { LinkList p,q; int tag=FLASE; //定义一个标记变量 tag 并初始化为 FLASE,用于标记是否成功找到并删除节点。 p=L; //将指针 p 指向链表的头结点。 q=L->next; //将指针 q 指向第一个有效节点,即头结点指向的第一个节点 while(q!=NULL) { if(q->data==e) { //如果当前节点的数据域等于待删除的数据 e,执行下面的操作。 p->next = q->next; //将前一个节点的指针指向当前节点的下一个节点,相当于跳过当前节点 q,从而将其删除。 //******************************----------------9---------------- free(q); tag=TRUE; //将标记 tag 设置为 TRUE,表示已找到并删除了节点。 } else p=q; //如果当前节点的数据域不等于待删除的数据 e,将 p 指向当前节点 q,准备处理下一个节点 q=p->next; //将指针 q 指向下一个节点,继续遍历链表。 } return tag; } void PrintLinkL(LinkList L) { LinkList p = L->next; while(p) { printf("%d→", p->data); p = p->next; } printf("∧\n"); } void FreeLinkL(LinkList &L) { LinkList p, q; p = L; while(p != NULL) { q = p; // 将 q 指向当前节点 p //******************************----------------10---------------- p = p->next; // 将 p 指向下一个节点 free(q); // 释放当前节点 q 的内存 } L = NULL; // 将链表头指针设置为 NULL,表示链表已被释放 } int main() { ElemType E[]= {34,12,45,64,28,36,45,56}; //准备线性表 int i,n=8; LinkList head; ElemType rc; printf("(1)表头插入法创建单链表......\n"); if(!CreatLinkL1(head,n,E)) { printf(" 内存空间不够,创建失败! \n"); return ERROR; } else { printf(" 创建完成。链表输出: "); PrintLinkL(head); } printf("(2)表尾插入法创建单链表......\n"); FreeLinkL(head); if(!CreatLinkL2(head,n,E)) { printf(" 内存空间不够,创建失败! \n"); return ERROR; } else { printf(" 创建完成。链表输出: "); PrintLinkL(head); } printf("(3)指定位置插入......\n"); printf("输入插入位置和新元素值==>"); scanf("%d%d",&i,&rc); if(!InsertLinkL(head,i,rc)) printf(" 参数错误或内存空间不够,插入失败! \n"); else { printf("插入成功!链表输出:"); PrintLinkL(head); } printf("(4)删除指定位置节点......\n"); printf("输入被删除节点位置==>"); scanf("%d",&i); if(!Del_LinkL1(head,i,rc)) printf("参数错误,删除失败!\n"); else { printf("删除成功!被删除的节点键值是:%d\n 链表输出:",rc); PrintLinkL(head); } printf("(5)删除指定节点值......\n"); printf("输入被删除键值==>"); scanf("%d",&rc); if(!Del_LinkL2(head,rc)) printf("输入的键值不存在!\n"); else { printf("删除成功!键表输出:"); PrintLinkL(head); } printf("(6)删除指定值所有节点.......\n"); printf("输入所有被删节点的键值==>"); scanf("%d",&rc); if(!Del_LinkL3(head,rc)) printf("输入的键值不存在!\n"); else { printf("删除成功!链表输出:"); PrintLinkL(head); } printf("(7)清空链表......\n"); FreeLinkL(head); PrintLinkL(head); if(!head) printf("链表已清空\n"); else printf("清空链表失败!"); }

资源文件列表:

数据结构实验2.zip 大约有2个文件
  1. 数据结构实验2/2.1.cpp 7.65KB
  2. 数据结构实验2/2.2.cpp 2.84KB
0评论
提交 加载更多评论
其他资源 RDriveImage7.zip
RDriveImage7.zip
springboot养老院管理系统(源码+数据库)00010
本文介绍了一种基于Spring Boot框架的养老院管理系统的设计与实现。该系统旨在帮助养老院管理者更有效地管理机构内的各项事务,并提供更好的服务于老年人。系统的设计考虑了养老院管理的特殊需求,包括系统用户、老人信息管理、服务分类管理、医疗服务管理、预约服务管理、健康信息管理、安全监控管理、财务信息管理、系统管理、公告管理、资源管理等功能模块。通过采用Spring Boot框架,系统具有良好的可扩展性和稳定性,同时提供了友好的用户界面和便捷的操作体验。在实现过程中,采用了前后端分离的开发模式,使用了Vue.js框架构建了前端界面,并通过RESTful API与后端服务进行交互。最后,通过对系统的测试和实际应用,验证了系统的可行性和有效性,表明该系统能够满足养老院管理的实际需求,具有一定的推广和应用价值。
springboot养老院管理系统(源码+数据库)00010 springboot养老院管理系统(源码+数据库)00010 springboot养老院管理系统(源码+数据库)00010
P0416智能音乐播放器(1).zip
P0416智能音乐播放器(1).zip
2021年齐鲁软件学院计算机组织与结构期中考试题与答案
2021年齐鲁软件学院计算机组织与结构期中考试题与答案
2021年齐鲁软件学院计算机组织与结构期中考试题与答案
springboot图书馆座位预约系统(附源码+数据库)85670
系统用户、阅览室管理、自习室类型管理、座位预定管理、入座信息管理、退座信息管理、取消预定管理、信用记录管理、在线签到管理、系统管理、留言管理、通知公告管理等功能模块,用户端:首页、通知公告、在线留言、阅览室、在线签到、我的账户、个人中心等功能,基本上实现了整个图书馆座位预约系统信息管理的过程。本系统在一般图书馆座位预约的基础上增加了更新信息的功能,方便用户快速浏览,是一个高效的、动态的、相互友好的图书馆座位预约系统。
springboot图书馆座位预约系统(附源码+数据库)85670 springboot图书馆座位预约系统(附源码+数据库)85670 springboot图书馆座位预约系统(附源码+数据库)85670
springboot宠物医院管理系统(源码+数据库)07221
(1)首页:展示宠物医院的最新资讯、医疗服务信息等。可能包含推荐的健康建议、预防措施等内容。 (2)宠物资讯:提供宠物健康、饮食、常见病症等方面的资讯文章或视频。帮助用户更好地了解和照顾自己的宠物。 (3)医生信息:包括医生的基本信息、专业领域、工作经验等。用户可以查看医生的资料以便选择合适的医生。 (4)我的账户:用户个人账户管理功能入口。包括用户的个人信息、头像、密码等。 (5)取消预约:允许用户取消已安排的预约。 (6)咨询回复:用户可以查看医生的咨询回复。 (7)预约信息:展示用户已安排的预约信息。 (8)咨询信息:用户可以查看自己的咨询记录和医生的回复。 (9)病历信息:用户可以查看自己的病历信息,方便了解自己宠物的健康情况。 收藏:用户可以收藏重要的资讯、医生信息等内容,方便后续查阅。
springboot宠物医院管理系统(源码+数据库)07221 springboot宠物医院管理系统(源码+数据库)07221 springboot宠物医院管理系统(源码+数据库)07221
2024_Diansai_C-main.zip
2024_Diansai_C-main.zip
springboot图书管理系统(附源码+数据库)00296
1.图书管理模块(增删改查)对象属性包含名字、类别、价格;中图分为5大部类(设计数据库时每个大类加一些图书) 2.读者信息(增删改查)对象属性包含:姓名、手机号、邮箱、身份证号 3.借阅信息(增删改查) 4.密码管理 5.黑名单(身份证为主键) 6.其他正常功能都加 7.人脸识别登录
springboot图书管理系统(附源码+数据库)00296 springboot图书管理系统(附源码+数据库)00296 springboot图书管理系统(附源码+数据库)00296