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语言实现)
链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...
随机推荐
- 利用stream对map集合进行过滤
最近公司在大张旗鼓的进行代码审核,从中也发现自己写代码的不好习惯.一次无意的点到了公司封装的对map集合过滤的方法,发现了stream.于是研究了一下.并对原有的代码再次结合Optional进行重构下 ...
- js & click copy to clipboard
js & click copy to clipboard https://www.cnblogs.com/xgqfrms/p/9999061.html https://www.cnblogs. ...
- keydown和KeyPress事件有何不同
KEYPRESSWhen a windowed control receives a key-press message (WM_CHAR) from Windows, its message han ...
- ionic2如何升级到最新版本、配置开发环境
好久没写东西了,去年用了angular2的RC版本和ionic2写了一个项目,因为开发周期和有些版本不稳定,所以一直没有升级,ng2新版本引用Aot打包,听说优化还不错,现在尝试升级ioni ...
- DAY7-Flask项目
1.cookie用于用户登录: Flask用于登录的插件:flask-login 插件初始化: 使用插件: 2.访问权限: 访问某个页面要登录之后才能访问: 为插件编写函数,写在user模块中:
- linux 配置文件(启动文件、环境文件)启动顺序
1.登录shell 登录shell时,linux会按一定规则读取启动几个配置文件: /ect/profile $HOME/.bash_profile $HOME/.bashrc $HOME/.bash ...
- PowerDesigner在生成SQL时报错Generation aborted due to errors detected during the verification of the mod
一.本章节要用到 ODBC连接数据库直接创建表,请先创建连接库的ODBC 请参考 新建 http://www.cnblogs.com/wdw31210/p/7580286.html 二.生成 去 ...
- SSM的整合
框架的整合: 1. 依赖整合 aop的包: aspectweaver spring-aop spring核心: spring-context spring-web spring-webmvc spri ...
- java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列
ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部:当我们获取一个元素时,它会返回队列头 ...
- js 弹出新页面,避免被浏览器、ad拦截的一种办法
以绑定click弹窗的方式,改为普通的链接,即 a[target=_blank],在点击打开新窗口之前,修改其href. 绑定mousedown,鼠标点击执行完成前修改href. 绑定focus,保证 ...