C语言实现线性表
#include <stdio.h>
#include <stdlib.h> //提供malloc()原型
/*
线性表需要的方法:
1、 List MakeEmpty():初始化一个空线性表
2、 EementType FindKey(int K, List L):根据位序K,返回相应元素
3、 int Find(ElementType X,List L): 在线性表L中查找X的第一次出现位置
4、 void Insert(ElementType X,int i,List L): 在位序i前插入一个新元素X
5、 void Delete(int i , List L): 删除指定位序i的元素
6、 int Length(List L):返回线性表L的长度n
*/
#define MAXSIZE 20
//define 预处理器指令,定义常量 typedef struct LNode *List;
typedef int ElementType;
//定义数据结构的自定义名称 struct LNode{
ElementType Data[MAXSIZE];//定义一个数组
int Last; //数组中最后一个元素位置
}; struct LNode L; //声明一个struct LNode 型的变量L
List PtrL;//声明一个struct LNode * 型的指针变量PtrL //-> 间接运算符,与一个指向结构或联合的指针一起使用,标识该结构或联合的一个成员
//访问下标为i的元素方法 L.Data[i] 或者 PtrL->Data[i] List MakeEmpty()
/*初始化,建立空的顺序表*/
{
List PtrL;
PtrL = (List )malloc(sizeof(struct LNode)); //使用malloc()为结构分配足够的内存空间,并设置PtrL指向该位置
if(NULL == PtrL)
//malloc()是否成功请求到内存
{
printf("内存分配失败!");
exit(EXIT_FAILURE); //EXIT_FAILURE的值也被定义在stdlib.h中。标准提供了两个返回值以保证在所有操作系统中都能正常工作:EXIT_SUCCESS(或者,相当于 0)表示普通的程序结束, EXIT_FAILURE 表示程序异常中止。
}
PtrL->Last = -;
return PtrL; //返回结构指针
} int Find(ElementType X, List PtrL)
/*查找*/
{
int i = ; //声明并初始化变量i
while (i <= PtrL->Last && PtrL->Data[i]!=X) //i 小于等于数组元素数量并且数组i位置的元素与X不相等
{
i++;//i递增1
}
if(i > PtrL->Last)//如果i大于了数组元素的数量
{
return -; //未找到
}
else
{
return i;//否则返回i
}
} void Insert(ElementType X, int i, List PtrL)
/*插入*/
{
int j;//声明变量j
if (PtrL->Last == MAXSIZE-)
{
printf("表空间已满!");
return;
}
if (i < || i > PtrL->Last+)
{
printf("非法位置");
return;
}
for (j=PtrL->Last;j>=i-;j--)//j初始化为数组元素长度,如果j大于等于i-1,
{
PtrL->Data[j+] = PtrL->Data[j]; //将数组 j 位置的元素位置向后移动一位
}
PtrL->Data[i-]=X; //在i-1的位置插入X
PtrL->Last++; //Last指向最后元素
return;
} void Delete(int i,List PtrL)
/*删除*/
{
int j;
if(i < || i > PtrL->Last+)
{
printf("%d元素不存在",i);
return;
}
for (j = i; i<= PtrL->Last;j++)
{
PtrL->Data[j-] = PtrL->Data[j]; //将i位置的元素移动到i-1的位置
}
PtrL->Last--; //Last指向最后元素
return;
} int main(int argc,char const *argv[])
{
MakeEmpty();//初始化
int n = ;
int i = ;
int get_find; for (;i<=n;i++)
{
Insert(i,i,&L); //插入元素
} for (i=;i<n;i++)
{
printf("%d",L.Data[i]); //打印插入的元素
} printf("\n"); get_find=Find(,&L);//查找5的位置
printf("%d",get_find);//打印查找的位置 printf("\n"); Delete(,&L);//删除元素5 for (i=;i<n-;i++)
{
printf("%d",L.Data[i]); //打印插入的元素
} return ; }
C语言实现线性表的更多相关文章
- 使用C语言实现线性表
线性表是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列,序列中的每个数据元素,可以是一个数字,可以是一个字符,也可以是复杂的结构体或对象.例如:1,2,3,4,5是一个线性表,A,B ...
- 纯C语言实现线性表
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef ...
- 学习使用C语言实现线性表
线性表是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列,序列中的每个数据元素,可以是一个数字,可以是一个字符,也可以是复杂的结 构体或对象.例如:1,2,3,4,5是一个线性表,A, ...
- 浅谈c语言的线性表的基本操作———基于严蔚敏的数据结构(c语言版)
主要讲的是线性表的创建,插入及删除: 0. 线性表的建立,对于这类操作主要是利用了结构体的性质,对于定义的线性表的特性主要有三点:首先 Typedef struct { ElemType *ele ...
- C语言实现线性表(链式存储方式)
#include <stdio.h> #include <stdlib.h> //提供malloc()原型 typedef struct LNode *List; typede ...
- 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表
一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...
- 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现
注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...
- 线性表之顺序存储结构(C语言动态数组实现)
线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...
- 数据结构-线性表的链式存储相关算法(C语言实现)
链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...
随机推荐
- 使用WinSW 将 exe 创建成Windows下面 service的方法 (将nginx创建成 services)
1. 使用winsw工具能够将部分exe 创建成服务, 这样可以很简单的创建nginx的服务, 避免每次需要执行相应的命令. 2. 方法,下载 工具 地址 github https://github. ...
- Qt Lighthouse学习(二),就是QPA(Qt Platform Abstraction) 项目的名字
上一次关注Qt Lighthouse是在6月初,可是现在都8月底了.时间真快... Lighthouse 是 QPA(Qt Platform Abstraction) 项目的名字,它使得将Qt移植到新 ...
- 网页正文提取,降噪的实现(readability/Document)
安装: pip install readability-lxml 使用: # encoding:utf-8import html2textimport requestsimport refrom re ...
- SQL有三个类型的索引,唯一索引 不能有重复,但聚集索引,非聚集索引可以有重复
重要: (1) SQL如果创建时候,不指定类型那么默认是非聚集索引 (2) 聚集索引和非聚集索引都可以有重复记录,唯一索引不能有重复记录. (3) 主键 默认是加了唯一约束的聚集索引,但是也可以在主键 ...
- jquery datatables 添加跳转到指定页功能
项目中使用了jquery datatables 作为我们的数据表格组件,但是分页上没有跳转到指定页,需要自己重新写.解决方法如下: 在设置dataTables的默认属性里设置它的drawCallbac ...
- Centos7 pip 安装MySQLdb(mysql-python)出错
租了个阿里云的Centos7的ECS,需要使用pip安装MySQLdb模块.也就是mysql-python模块. 但是遇到问题 Collecting mysql-python Downloading ...
- 【uoj#280】[UTR #2]题目难度提升 对顶堆+STL-set
题目描述 给出 $n$ 个数 $a_1,a_2,...,a_n$ ,将其排为序列 $\{p_i\}$ ,满足 $\{前\ i\ 个数的中位数\}$ 单调不降.求字典序最大的 $\{p_i\}$ . 其 ...
- oracle exp导出加上过滤条件
exp username/password@dbname file='d:\hehe.dmp' tables=(%) query="""where UPDATE_DT ...
- 【poj1390】 Blocks
http://poj.org/problem?id=1390 (题目链接) 题意 给出一排方块,每次可以把颜色相同的消掉,获得长度的平方的分数,问最大得分. Solution 蜜汁dp.. 我们把颜色 ...
- C++继承与组合的区别
C++程序开发中,设计孤立的类比较容易,设计相互关联的类却比较难,这其中会涉及到两个概念,一个是继承(Inheritance),一个是组合(Composition).因为二者有一定的相似性,往往令程序 ...