基于C语言的线性表操作,包含单链表和顺序线性表两种类型
用了四天的闲余时间,终于写完了线性表的顺序和链式两种结构的代码,进度有些慢,因为的确遇到了一些问题,也学到了一些知识,上传代码,同时代码同步更新到我创建的项目里,欢迎指出代码或者算法等等的不足和修改意见!
项目链接:https://code.csdn.net/a894554149/link_based_on_c/tree/master
/*顺序存储结构的线性表操作函数*/
#include<stdio.h>
#include<stdbool.h>
#define MAXSIZE 100
#define OK 0
#define ERROR 1typedef int Status;
typedef int ElemType;typedef struct{ElemType data[MAXSIZE];int Length;
} SqList;Status InitList(SqList *L) //初始化一个sq线性表
{L->Length = 0;return OK;
}Status ListInsert(SqList *L,int i,ElemType e)//在线性表L中第i个位置插入新元素e
{int j;if( i<1 || i>L->Length+1 ){return ERROR;}if(L->Length+1 > MAXSIZE){return ERROR;}for( j=L->Length; j>i-1 ;j-- ){L->data[j] = L->data[j-1];}L->data[i-1] = e;L->Length++;return OK;
}bool ListEmpty(SqList L) //判断线性表是否为空表
{return !(bool)L.Length;
}void printList(SqList L)//打印顺序线性表
{int i;if(L.Length == 0){printf("List is Empty!");}printf("\n");for( i=0; i<L.Length; i++ ){printf("%d ",L.data[i]);}printf("\n");printf("\n");
}Status ClearList(SqList *L) //清空线性表
{/*int i;for( i=0; i<L->Length; i++){L->data[i] = 0} */ //其实这个for循环可以不用写L->Length = 0; return OK;
}Status GetElem(SqList L, int i, ElemType *e) //取线性表L中第i个元素赋值给e
{if( i<1 || i>L.Length ){return ERROR;}*e = L.data[i-1];return OK;
}Status LocateElem(SqList L, ElemType e) //在线性表L中定位元素e
{int i;if(L.Length == 0){return 0;}for( i=0; i < L.Length; i++){if(L.data[i] == e){return i+1;}}return 0;
}Status ListLength(SqList L)
{return L.Length;
}Status ListDelete(SqList *L, int i, ElemType *e)
{int j;if( i<1 || i>L->Length ) //这里不用判断是否为空表{ //因为是空表的话,L->Length为0return ERROR; //小于1或大于0包含了全体实数,所以是空表必然返回ERROR}*e = L->data[i-1]; for( j=i-1; j < L->Length-1; j++ ){L->data[j] = L->data[j+1];}L->Length--;return OK;
}
/*顺序存储结构的主函数*/
#include</home/linux/ds&a/list/sequence/Sequence.c> //这里需要填写sequence.c文件的绝对路径
#define MAXLIST 10void main()
{SqList s[MAXLIST];//注意,不同链表的数据类型不一样int m = 0; //创建的线性表数目int n = 0; //选定的线性表int d = 0; //选定的操作int i = 0; //线性表中的位置int e = 0; //线性表中的数据while(1){printf("1:创建线性表\n");printf("2:操作线性表\n");printf("0:退出系统!\n\n");printf("请输入操作代码:");while( scanf("%d",&d)== 0 ){getchar();printf("输入格式错误,请重新输入:"); }getchar();if ( 0 == d ) //0:退出系统{break;}else if ( 1 == d ) //1:创建线性表{if( m >= MAXLIST ){printf("\t\t\t已达到最大可创建的线性表数目,创建失败!\n");continue;}InitList( &s[m] );printf("\t\t\t编号为%d的线性表已被创建!\n",m+1);m++;}else if( 2 == d ) //2:操作线性表{if( m == 0){printf("\t\t\t还没有线性表被创建,请先创建线性表!\n");continue;}printf("\n请输入要操作的线性表代码,返回主菜单,请输入0:");while(scanf("%d",&n) == 0){getchar();printf("输
基于C语言的线性表操作,包含单链表和顺序线性表两种类型相关推荐
- ML之RF:基于葡萄牙银行机构营销活动数据集(年龄/职业/婚姻/违约等)利用Pipeline框架(两种类型特征并行处理)+RF模型预测(调参+交叉验证评估+模型推理)客户是否购买该银行的产品二分类案例
ML之RF:基于葡萄牙银行机构营销活动数据集(年龄/职业/婚姻/违约等)利用Pipeline框架(两种类型特征并行处理)+RF模型预测(调参+交叉验证评估+模型推理)客户是否购买该银行的产品二分类案例 ...
- ML:基于葡萄牙银行机构营销活动数据集(年龄/职业等)利用Pipeline框架(两种类型特征并行处理)+多种模型预测(分层抽样+调参交叉验证评估+网格/随机搜索+推理)客户是否购买该银行的产品二分类案
ML之pipeline:基于葡萄牙银行机构营销活动数据集(年龄/职业/婚姻/违约等)利用Pipeline框架(两种类型特征并行处理)+多种模型预测(分层抽样+调参交叉验证评估+网格搜索/随机搜索+模型 ...
- 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...
的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...
- C语言线性表之循环单链表
#include<stdio.h> #include<stdlib.h>int typeOfLinkList;typedef struct LNode{int data;str ...
- C语言将结点s赋给表L,数据结构-单链表
一.单链表基本定义 线性表的链式存储:线性表采用链式方式将结点链接起来的存储结构称之链表.单链表结构,分前后两个域,date数据域:存放结点的值,next指针域:存放数据元素后继的位置.附设头结点的目 ...
- 线性表的应用 —— 单链表
线性表的应用 -- 单链表 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,可以给每个元素都附加一个指针域,指向下一个元素的存储位置. 像这样: 从图中可以看出,每个节点都 ...
- 链表归并成递减c语言,将递增有序单链表A和B归并成表C 递减单链表的尾插法建立和输出...
自己辛苦成果,拿出来帮助那些数据结构没学好和C语言基础差的人 #include #include typedef struct Node { int data; struct Node *next; ...
- R语言生存分析寿命表(life table)实战案例:比较两种药物治疗感染患者的生存时间
R语言生存分析寿命表(life table)实战案例:比较两种药物治疗感染患者的生存时间 目录
- 设计一个处理两种类型地址的地址簿程序_编译器设计-符号表-中间代码生成
编译器设计-符号表-中间代码生成 Compiler Design - Symbol Table Compiler - Intermediate Code Generation 一.Compiler D ...
- Spring 让 LOB 数据操作变得简单易行,LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型
http://www.ibm.com/developerworks/cn/java/j-lo-spring-lob/index.html 本文讲解了在 Spring 中处理 LOB 数据的原理和方法, ...
最新文章
- Linux负载均衡实现
- 【干货】常用的Linux 系统备份、恢复命令
- Misc(网络+组成原理)
- Python中字符串操作函数string.split('str1')和string.join(ls)
- Shell入门(五)之参数
- mysql取消mvvc机制_MySQL探秘(六):InnoDB一致性非锁定读
- 全国计算机二级C 错题/知识点整理
- Struts2体系介绍
- 黑客帝国里的代码雨-java代码实现
- HTTP 405Method not allowed
- bitbake的原理介绍, 使用方法, 编译脚本的编写方法
- 计算机视觉之目标检测(object detection)《1》
- 携创教育:2022学历改革解读系列|提升学历、迫在眉睫
- h5 适配 iphoneX 的全面屏 (上有刘海 ,下有呼吸灯) ,在iphonX 上 fixed定位的问题
- JS标准内置对象 数组 的 34 个方法
- 计算机程序必须具有硬盘才能工作吗,2016年3月计算机一级考试WPS试题及答案
- 作为技术团队TL,如何运用OKR提高团队产出
- latex 编译新的tex时,缺少sty文件时的安装方法
- Python 套接字编程
- MongoDB 模糊查询包含/不包含字符串
热门文章
- Mac使用技巧:如何更好地使用Spotlight!
- 关于指针和引用的一些感想,为什么指针用好了是大杀器。时四两拨千斤。
- 机器人时代已来?银行客服机器人受热捧
- 基本概念:子域名和域
- CSS—弹性盒子布局(一看就懂)
- 【教学类-34-05】20230523拼图(数字学号0X-长方块拼图-双色深灰浅灰)3*3格子(中班主题《个别化拼图》偏艺术-美术)
- 宝洁PG使用EDI实现供应链整合详解
- 为什么要用impl继承service层_service和serviceImpl的选择
- 华企盾DSC发送白名单提示“解密发送失败”(被中转服务器判定为垃圾邮箱)
- [C/C++]C语言中对文件的操作方法