数据结构与算法-4-链表的基本操作-增
数据结构与算法-4-链表的基本操作-增
注意:以下为顺序存储结构实现
- 相关的头文件
/*以下为头文件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-链表的基本操作-增相关推荐
- 数据结构与算法-2-链表的基本操作-查找
数据结构与算法-2-链表的基本操作-查找(c语言) 本文是单链表的C语言实现方法,包括单链表的创建.插入.删除.修改.查找等基本操作. 链表结点的类型定义 /*链式存储结构的头结点*/ typedef ...
- python定义链表节点_Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】...
本文实例讲述了Python数据结构与算法之链表定义与用法.分享给大家供大家参考,具体如下: 本文将为大家讲解: (1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计 (2)链表类插入和 ...
- 数据结构与算法之链表结构寻找p、q最近的公共祖先
链表结构,寻找p.q最近的公共祖先 数据结构与算法之链表结构寻找p.q最近的公共祖先 链表结构,寻找p.q最近的公共祖先 问题 想法 代码 问题 设一棵二叉树的结点结构为(LLINK, INFO, R ...
- 数据结构与算法--单链表相关面试题
此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...
- 数据结构与算法 内核链表实现商品购物系统项目+Makefile
数据结构与算法 内核链表实现商品购物系统项目 第一章 项目实现思维 [1]编译介绍 [2]框架思维 第二章 Makefile编写 第三章 代码编写实现 [1]favorite.txt文件 [2]his ...
- 一文通数据结构与算法之——链表+常见题型与解题策略+Leetcode经典题
文章目录 1 链表 1.1 常见题型及解题策略 1.1.1 LeetCode中关于链表的题目有以下五种类型题: 1.1.2 解题策略 1.2 链表的基本内容 1.2.1 链表的基本结构: 1.2.2 ...
- java数据接口之链表_Java数据结构和算法之链表
三.链表 链结点 在链表中,每个数据项都被包含在'点"中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LI ...
- 数据结构与算法之-----链表(List)
[ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据结构,也是自己 ...
- 头歌平台数据结构与算法 单链表实验 第1关:倒置链表
任务描述 相关知识 实验目的 实验任务 实验说明 编程要求 测试说明 任务描述 本关任务:请在右侧编辑器的注释行填入适当内容来完成算法,以实现指定的功能,并通过运行来验证. 相关知识 实验目的 理解线 ...
最新文章
- 如何解决diff: /../Podfile.lock: No such file or directory 的问题
- MVC5中EF6 Code First启动慢及间隙变慢优化的实践经验(转)
- struts.xml中class路径错误报错的问题
- Cloud for Customer的工作中心(work center)加载源代码
- maven的pom.xml文件
- jenkins 安装 和自动部署的 一些配置
- SAP License:AM手工折旧计算外折旧
- 全向轮机器人正前轮运动学分析
- docker搭建upload-labs
- 淘宝图片服务器的学习
- 【环境安装】Ubuntu20.04 安装yasm-1.3.0
- 武汉纺织大学计算机科学校区在哪,武汉纺织大学阳光校区在哪 环境好不好
- 以太坊教程-使用 remix-ide 开发以太坊智能合约
- 艺术类职称计算机考试,2017年职称计算机考试Word2003巩固练习题20
- 「BJOI 2019」勘破神机
- steamlit安装
- vi模式下的编辑、删除、保存和退出
- jupyter学习记录(一)——安装模块与导入图片
- JS checkbox
- 徕卡 sl android app,随时随地无缝互联 徕卡发布最新版FOTOS App