数据结构与算法-4-链表的基本操作-增

注意:以下为顺序存储结构实现

  1. 相关的头文件
/*以下为头文件SqList.h是用于定义相关函数的头文件*/
#pragma once
#define LIST_INIT_SIZE 100/*初始线性表的尺寸大小为100*/
#define LIST_INCREAMENT 10/*每次增量为10*/
typedef enum  {success,fatal,fail,range_error
}Status;/*状态参量的定义*/
typedef int ElemType;
typedef struct SqList
{ElemType* elem;/*数据*/int length;/*顺序链表的长度*/int list_size;/*该顺序链表所占的总空间大小*/
}SqList,*Ptr,*SqListPtr;
Status List_Init(SqListPtr L);/*对线性表初始化*/
void List_Destory(SqListPtr L);/*归还线性表*/
void List_Clear(SqListPtr L);/*清空线性表*/
Status List_Retrival(SqListPtr L,int pos,ElemType *elem);/*查找某元素位置*/
Status List_Locate(SqListPtr L,ElemType elem,int *pos);/*插入元素*/
void List_Print(SqListPtr L);/*打印函数*/
/*以下为头文件TestSqlist.h是用于测试的头文件*/
#pragma once
#include"Sqlist.h"
Status Test_CreateList(SqListPtr list,ElemType data[],int n);
Status Test_ClearList(SqListPtr list);

2.相关的C文件

/*是Sqlist.c用于测试Sqlist.h中的函数*/
#include<stdio.h>
#include<stdlib.h>
#include"Sqlist.h"Status List_Init(SqListPtr L)
{Status s = fail;if (L!=NULL){L->elem = (ElemType*)malloc((LIST_INIT_SIZE+1) * sizeof(ElemType));/*给线性表分配空间*/if (L->elem){L->list_size = LIST_INIT_SIZE;/*分配成功则线性表的总空间大小为100*/L->length = 0;/*初期元素个数为零*/s = success;}}return s;
}
void List_Destory(SqListPtr L)
{if (L)/*线性表存在*/{if (L->elem)/*这个空间存在*/{free(L->elem);L->elem = NULL;L->length = 0;}}
}
void List_Clear(SqListPtr L)
{if (L){L->length = 0;}
}
bool List_Empty(SqListPtr L)
{return (L->length == 0);
}
int List_size(SqListPtr L)
{return L->length;
}
Status List_Insert(SqListPtr L, int pos, ElemType elem)
{Status s = range_error;int i;if (L){if (pos >= 1 && pos <= L->length+1)/*在最后一个元素后面插入也是可以的*/{if (L->length < L->list_size)/*线性表的长度小于所分配的空间即可插入*/{for (i = L->length; i >= pos; i--){L->elem[i + 1] = L->elem[i];/*所有元素向后移动一位*/}L->elem[i+1] = elem;L->length += 1;s = success;}}}return s;
}
void List_Print(SqListPtr L)
{int i;if (L){for (i = 1; i<=L->length; i++){printf("%d ", L->elem[i]);if (i % 10 == 0){printf("\n");  }}}
}
/*是TestSqList.c用于测试TestSqList.h中的函数*/
#include<stdio.h>
#include<stdlib.h>
#include"TestSqList.h"
Status Test_CreateList(SqListPtr list, ElemType data[], int n)
{Status s = fail;s = List_Init(list);int i;if (s == success){for (i = 1; i <= n; i++){s = List_Insert(list, i, data[i]);if (s != success){break;}}List_Print(list);}return s;
}
Status Test_ClearList(SqListPtr list)
{Status s = fail;if (!List_Empty(list)){List_Clear(list);if (List_Empty(list)){s = success;}}return s;
}

3.主函数的实现

#include<stdio.h>
#include<stdlib.h>
#include"TestSqList.h"
int main()
{int opt=1;/*选项*/SqListPtr list;int pos, size,i;Status s;ElemType e, * data;while (opt!=6) {printf("请输入选项\n");printf("1:测试建立线性表\n");printf("2:测试清空线性表\n");printf("3:测试求位置的线性表元素值及其前驱后继\n");printf("4;测试查询某元素的位置\n");printf("5:测试求线性表的长度\n");printf("6:结束程序\n");printf("*****************************************\n");scanf_s("%d", &opt);switch (opt){case 1:printf("线性表长度\n");scanf_s("%d", &size);data = (ElemType*)malloc(sizeof(ElemType) * (size+1));if (data == NULL) break;printf("线性表元素\n");for (i = 1; i <=size; i++){scanf_s("%d", &data[i]);}s = Test_CreateList(&list, data, size);/*根据读入的数据建立线性表*/if (s != success) printf("建立线性表失败\n");free(data);List_Destory(&list);break;case 2:printf("线性表长度\n");scanf_s("%d", &size);data = (ElemType*)malloc(sizeof(ElemType) * (size+1));if (data == NULL) break;printf("线性表元素\n");for (i = 1; i <= size; i++){scanf_s("%d", &data[i]);}s = Test_CreateList(&list, data, size);/*根据读入的数据建立线性表*/if (s == success){if (!List_Empty(&list)){List_Clear(&list);if (List_Empty(&list)){printf("已经清空线性表\n");}}}free(data);List_Destory(&list);break;case 3:printf("线性表长度\n");scanf_s("%d", &size);data = (ElemType*)malloc(sizeof(ElemType) * (size+1));if (data == NULL) break;printf("线性表元素\n");for (i = 1; i <= size; i++){scanf_s("%d", &data[i]);}s = Test_CreateList(&list, data, size);/*根据读入的数据建立线性表*/if (s == success){printf("输入待查找元素的位置\n");scanf_s("%d", &pos);Test_Retrivalpriornext(&list, pos);}free(data);List_Destory(&list);break;case 4:printf("线性表长度\n");scanf_s("%d", &size);data = (ElemType*)malloc(sizeof(ElemType) * (size+1));if (data == NULL) break;printf("线性表元素\n");for (i = 1; i <= size; i++){scanf_s("%d", &data[i]);}s = Test_CreateList(&list, data, size);/*根据读入的数据建立线性表*/if (s == success){printf("输入待查询的元素值\n");scanf_s("%d", &e);Test_Locate(&list, e);}free(data);List_Destory(&list);break;case 5:printf("线性表长度\n");scanf_s("%d", &size);data = (ElemType*)malloc(sizeof(ElemType) * (size+1));if (data == NULL) break;printf("线性表元素\n");for (i = 1; i <= size; i++){scanf_s("%d", &data[i]);}s = Test_CreateList(&list, data, size);/*根据读入的数据建立线性表*/if (s == success) {Test_Size(&list);}free(data);List_Destory(&list);break;default:break;}}return 0;
}

4.感谢戴波老师,欢迎交流指正!!!

数据结构与算法-4-链表的基本操作-增相关推荐

  1. 数据结构与算法-2-链表的基本操作-查找

    数据结构与算法-2-链表的基本操作-查找(c语言) 本文是单链表的C语言实现方法,包括单链表的创建.插入.删除.修改.查找等基本操作. 链表结点的类型定义 /*链式存储结构的头结点*/ typedef ...

  2. python定义链表节点_Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】...

    本文实例讲述了Python数据结构与算法之链表定义与用法.分享给大家供大家参考,具体如下: 本文将为大家讲解: (1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计 (2)链表类插入和 ...

  3. 数据结构与算法之链表结构寻找p、q最近的公共祖先

    链表结构,寻找p.q最近的公共祖先 数据结构与算法之链表结构寻找p.q最近的公共祖先 链表结构,寻找p.q最近的公共祖先 问题 想法 代码 问题 设一棵二叉树的结点结构为(LLINK, INFO, R ...

  4. 数据结构与算法--单链表相关面试题

    此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...

  5. 数据结构与算法 内核链表实现商品购物系统项目+Makefile

    数据结构与算法 内核链表实现商品购物系统项目 第一章 项目实现思维 [1]编译介绍 [2]框架思维 第二章 Makefile编写 第三章 代码编写实现 [1]favorite.txt文件 [2]his ...

  6. 一文通数据结构与算法之——链表+常见题型与解题策略+Leetcode经典题

    文章目录 1 链表 1.1 常见题型及解题策略 1.1.1 LeetCode中关于链表的题目有以下五种类型题: 1.1.2 解题策略 1.2 链表的基本内容 1.2.1 链表的基本结构: 1.2.2 ...

  7. java数据接口之链表_Java数据结构和算法之链表

    三.链表 链结点 在链表中,每个数据项都被包含在'点"中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LI ...

  8. 数据结构与算法之-----链表(List)

    [ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于​​​​​​​初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据结构,也是自己 ...

  9. 头歌平台数据结构与算法 单链表实验 第1关:倒置链表

    任务描述 相关知识 实验目的 实验任务 实验说明 编程要求 测试说明 任务描述 本关任务:请在右侧编辑器的注释行填入适当内容来完成算法,以实现指定的功能,并通过运行来验证. 相关知识 实验目的 理解线 ...

最新文章

  1. 如何解决diff: /../Podfile.lock: No such file or directory 的问题
  2. MVC5中EF6 Code First启动慢及间隙变慢优化的实践经验(转)
  3. struts.xml中class路径错误报错的问题
  4. Cloud for Customer的工作中心(work center)加载源代码
  5. maven的pom.xml文件
  6. jenkins 安装 和自动部署的 一些配置
  7. SAP License:AM手工折旧计算外折旧
  8. 全向轮机器人正前轮运动学分析
  9. docker搭建upload-labs
  10. 淘宝图片服务器的学习
  11. 【环境安装】Ubuntu20.04 安装yasm-1.3.0
  12. 武汉纺织大学计算机科学校区在哪,武汉纺织大学阳光校区在哪 环境好不好
  13. 以太坊教程-使用 remix-ide 开发以太坊智能合约
  14. 艺术类职称计算机考试,2017年职称计算机考试Word2003巩固练习题20
  15. 「BJOI 2019」勘破神机
  16. steamlit安装
  17. vi模式下的编辑、删除、保存和退出
  18. jupyter学习记录(一)——安装模块与导入图片
  19. JS checkbox
  20. 徕卡 sl android app,随时随地无缝互联 徕卡发布最新版FOTOS App

热门文章

  1. AWS 解决方案架构师考点(IAM)
  2. 82567LM-3 网卡驱动
  3. 自定义控件其实很简单 七
  4. ajaxfileupload+spring mvc 单张图片上传
  5. 一体化污水处理设备的三种污水处理工艺详解
  6. WEB服务器状态跟踪
  7. 美国通胀“爆表”,能否胀死美国经济? | 经济学人全球早报精选
  8. 1:1还原,自制树莓派复古街机:教程已开源
  9. CVE-2019-9766-----Free MP3 CD Ripper音频转换器漏洞复现
  10. 图片的基本读取和保存操作