数据结构 严蔚敏 版 线性链表c语言实现

news/2024/10/21 11:32:38/

LinkList.h


typedef int ElemType;
typedef int Status;typedef struct LNode {ElemType data;struct LNode * next;}LNode,*LinkList;//当第i个元素存在 把值 通过e返回
Status GetElem_L(LinkList, int, ElemType *);//元素插入 2.8
Status ListInsert_L(LinkList,int ,ElemType);//元素删除 2.9
Status ListDelete_L(LinkList ,int  ,ElemType * );//创建 2.10
void CreateList_L(LinkList * ,int );// 排序  归并
LinkList SortInList(LinkList L, LinkList H);//2.11 参照排序的归并部分

LinkList.c

#include <stdlib.h>
#include<stdio.h>
#include "./LinkList.h"//当第i个元素存在 把值 通过e返回
Status GetElem_L(LinkList L, int i, ElemType* e) {LinkList p;int j; p = L;p = p->next;//p指向第一个结点j = 0; //计数//寻找第 i个位置结点while (p && j < i){//p指向下一个 结点  j++;p = p->next;++j;};//第i个元素 不存在if (!p || j > i) {return -1;};//返回第i个 结点的值*e = p->data;return 0;};//元素插入
Status ListInsert_L(LinkList L, int i , ElemType e) {LinkList p;LinkList s;int j;p = L;j = -1; //表示头结点位置  0表示第一个结点位置//寻找第i-1个结点while (p && j < i - 1){p = p->next;++j;};if (!p || j > i - 1) {return -1;};//生成新节点s = (LinkList)malloc(sizeof(LNode));s->data = e;//插入s->next = p->next;p->next = s;return 0;
};//元素删除
Status ListDelete_L(LinkList L, int i, ElemType* e) {LinkList p;LinkList q;int j;p = L;j = -1; //表示头结点位置  0表示第一个结点位置//寻找要删除结点的前一个结点while (p->next && j < i - 1){p = p->next;++j;};if (!(p->next) || j > i - 1) {return -1;};//删除q = p->next;//记录一下要删除 结点位置 一会 释放 //p的next指向q的下一个结点  p->next = q->next;*e = q->data; //将删除的结点数据返回//释放free(q);return  0;
};//创建
void CreateList_L(LinkList * L, int n) {LinkList p;int  i;//创建一个头结点 并返回给外部使用 *L = (LinkList)malloc(sizeof(LNode));(*L)->next = NULL;for (i = n - 1; i >= 0; --i) {//生成新结点p = (LinkList)malloc(sizeof(LNode));//输入 元素值 scanf_s("%d", &(p->data));//插入 到头结点后面 -》因为每次 新 值 都是插入头结点后面   所以最后插入的在第一个位置p->next = (*L)->next; //当前结点的next指向原先结点(*L)->next = p; //头结点指向当前结点};
};// 排序  归并 L不能传入头结点 需要传入L->next
LinkList SortInList(LinkList L, LinkList  H) {LinkList res = H;//递归结束条件if (!L || !(L->next)) {return L;}//计算中点  用来分链表LinkList slow, fast, newList,leftNode,rightNode;//快慢指针找中点slow = L;fast = L->next;while (fast && fast->next) //记录: fast && fast->next 这两个判断顺序 不能写反  如果先 判断fast->next,当fast为空时,fast->next理所当然会出现 nullprt异常{slow = slow->next;fast = fast->next->next;}//分割成两个链表newList = slow->next; //1.新链表slow->next = NULL; //2. 新链表结尾为null//递归分割leftNode = SortInList(L,res);rightNode = SortInList(newList,res);//归并while (leftNode && rightNode){if (leftNode->data <= rightNode->data) {H->next = leftNode;leftNode = leftNode->next;}else {H->next = rightNode;rightNode = rightNode->next;};H = H->next;};if (!leftNode) {H->next = rightNode;}if (!rightNode) {H->next = leftNode;}return res->next;};

Main.c

#include <stdlib.h>
#include<stdio.h>
#include "./LinkList.h"int main() {LinkList  l;LinkList  p;
/*	CreateList_L(&l, 3);ElemType e;GetElem_L(l, 0,&e);printf("%d\n", e);GetElem_L(l, 1, &e);printf("%d\n", e);GetElem_L(l, 2, &e);printf("%d\n", e);*/CreateList_L(&l, 0);printf("插入-------------------------------\n");ListInsert_L(l, 0, 1);ListInsert_L(l, 1, 3);ListInsert_L(l, 2, 2);ListInsert_L(l, 3, 4);ListInsert_L(l, 3, 8);ListInsert_L(l, 3, 9);ListInsert_L(l, 3, 6);p = l;while (p->next){p = p->next;printf("%d\n", p->data);}printf("删除-------------------------------\n");ElemType r;ListDelete_L(l, 3, &r);printf("删除了:%d\n",r);p = l;while (p->next){p = p->next;printf("%d\n", p->data);}printf("sort-------------------------------\n");SortInList(l->next, l);p = l;while (p->next){p = p->next;printf("%d\n", p->data);}printf("end-------------------------------");return 0;
}

http://www.ppmy.cn/news/625681.html

相关文章

IDC:爱数再次蝉联备份一体机市场中国品牌第一

IDC最新公布的《中国备份一体机市场预测与分析&#xff0c;2014-2019》市场调查报告显示&#xff1a;2014年&#xff0c;中国备份一体机市场规模达到一亿六千万美元的规模&#xff0c;与2013年的数据相比增长超过14.0%。EISOO&#xff08;爱数)在备份一体机市场份额为24.0%&…

Oracle Exadata一体机与云计算应用(一)

1. Exadata 1.1 Oracle 云计算简介 随着云计算基础架构的不断成熟&#xff0c;越来越多的企业开始关注云计算的实施&#xff0c;加速部署云计算解决方案&#xff0c;将其IT应用及数据资源迁移到云环境之中。而对于“云”的潜在用户而言&#xff0c;他们最关心的莫过于“云”将如…

机器视觉运动控制一体机应用例程|U盘视觉定位激光打标解决方案

一、应用背景 U盘已普遍成为我们的日常生活或是办公时不可或缺一种办公用品。U盘不仅整体形状小&#xff0c;出门携带方便&#xff0c;而且还有很强的实用属性。例如可以用来存储资料文件、数据等的存储媒介。 随着U盘的市场需求量不断攀升&#xff0c;同时企业对U盘的打标质…

基于启扬RK3288的政务服务一体机硬件方案

随着政府基础建设投入的不断深化&#xff0c;政府聚合人、物、场等要素&#xff0c;整合数据云资源&#xff0c;形成以政务服务为核心的立体大数据&#xff0c;为民众带来更加便捷的服务。24小时政务服务大厅和政务服务一体机正是各地实施智慧政务的有力体现。 政务服务一体机…

Unity VR 开发教程: Oculus 一体机开发 (一) 环境配置(基于 Oculus Integration v46)

文章目录 &#x1f4d5;教程说明&#x1f4d5;安装 Unity 时需要添加的模块&#x1f4d5;设置 Unity 的 Build Settings&#x1f4d5;导入 Oculus Integration&#x1f4d5;设置 Project Settings⭐通用设置⭐Rendering 设置⭐Identification 设置⭐Configuration 设置⭐XR Plu…

兄弟j220怎么清零_BROTHER 兄弟一体机 复位清除计数器

“无法清洁的错误或错误46防止你从你的兄弟喷墨打印机上打印。这是特别令人沮丧&#xff0c;当你知道有没有理由你不能进行印刷此消息。继续阅读以了解是什么让我这样说&#xff0c;你可以摆脱自己的这个错误。 本指南将专门处理与兄弟喷墨打印机有一个数字键盘上的打印机前部。…

联想微型计算机b540u盘启动,联想IdeaCentre B540p一体机怎么用u盘装机大师u盘装系统...

联想IdeaCentre B540p一体机怎么用u盘装机大师u盘装系统?联想IdeaCentre B540p一体机外观是相框式的&#xff0c;没有底座&#xff0c;能够为用户节省很多桌面使用空间&#xff0c;而且搭载了IVB芯处理器&#xff0c;性能非常强悍&#xff0c;受到了很多家庭用户的喜爱&#x…

联想微型计算机进入bios,联想一体机怎么进入bios_联想笔记本进入bios的具体方法-系统城...

2017-01-23 16:45:38  浏览量:2334 很多时候我们需要进入BIOS进行相关的设置,比如电源管理、启动项设置等等,最近有用户想进入联想z470笔记本电脑BIOS设置,但是不知道z470进入BIOS按哪个键,有些用户反映z470无法打开BIOS,那么联想z470怎么进入BIOS呢?下面跟小编一起来…