C语言--线性表
#include<stdlib.h>
#include<string.h>
#define LIST_SIZE 100
#define LIST_INCREMENT 10
typedef int Datatype ;
typedef struct{
Datatype* data;
int length;
int listsize;
}seqlist;
初始条件:无
操作结果:构造一个空的线性表。成功返回0出错返回-1*/
{
L->data = (Datatype *)malloc(sizeof(Datatype)*LIST_SIZE);
if (L->data == NULL)
return -1;
L->length = 0;
L->listsize = LIST_SIZE;
printf("initial finish\n");
return 0;
}
初始条件:线性表L已经存在
操作结果:销毁线性表L。成功返回0出错返回-1*/
{
while (!L->data)
free(L->data);
L->length = 0;
printf("destroy finish\n");
return 0;
初始条件:线性表L已经存在
操作结果:若L为空表,返回0,否则返回-1*/
{
if (L.length == 0)
{
printf("list is empty\n");
return 0;
}
else
return -1;
}
初始条件:线性表L已经存在
操作结果:返回表的长度,失败返回-1*/
{
}
初始条件:线性表L已经存在1=<i<=LIST_SIZE
操作结果:用e返回L中第i个元素的值成功返回0出错返回-1*/
int Getelem(seqlist L, int i, Datatype *e)
{
if (i < 0 || i >LIST_SIZE)
{
printf("position error\n");
return -1;
}
*e = L.data[i];
return 0;
/*Locateelem(L,e)
初始条件:线性表L已经存在
操作结果:返回L中第一个和e相等的序列号,若元素不存在,则返回-1*/
int Locateelem(seqlist L, Datatype e)
{
for (i = 0; i < L.length; i++)
{
if (L.data[i] == e)
return i+1;
}
return -1;
}
/*Priorelem(L,cur_e,&pre_e)
初始条件:线性表已经存在
操作结果:若cur_e是L中的元素,且不是第一个,则用pre_e返回它的前驱元素,否则返回错误-1,成功返回0*/
int Priorelem(seqlist L, Datatype cur_e, Datatype *pre_e)
{
int i = 0;
if (cur_e == L.data[0])
return -1;
i = Locateelem(L, cur_e);
if (i== -1)
return -1;
else
{
*pre_e = L.data[i - 2];
return 0;
}
/*Nextelem(L,cur_e,&next_e)
初始条件:线性表已经存在
操作结果:若cur_e是L中的元素,且不是最后一个,则用next_e返回它的后继元素,否则返回错误-1,成功返回0*/
int Nextelem(seqlist L, Datatype cur_e, Datatype *next_e)
{
int i = 0;
if (cur_e == L.data[ListLength(L)-1])
return -1;
i = Locateelem(L, cur_e);
if (i == -1)
return -1;
else
{
*next_e = L.data[i];
return 0;
}
/*ListInsert(&L,i,e)
初始条件:线性表L已经存在
操作结果:在L中第i个位置之前插入新的数据,表长加1,返回0成功,-1错误*/
int ListInsert(seqlist *L, int i, Datatype e)
{
if (i<1 || i>L->listsize)
{
printf("position error\n");
return -1;
}
if (L->length >= L->listsize)
L->data = (Datatype *)realloc(L->data, (LIST_INCREMENT + LIST_SIZE)*sizeof(Datatype));
if (!L->data)
{
printf("realloc error\n");
return -1;
}
Datatype *q=NULL;
q = &L->data[i - 1];//插入位置
Datatype *p = NULL;
for (p = &L->data[L->length - 1]; p >= q;p--)//从最后一个位置开始依次把前面的值赋值给后一个位置
{
*(p + 1) = *p;
}
*q = e;
L->length++;
L->listsize += LIST_INCREMENT;
return 0;
/*Listdelete(&L,i,&e)
初始条件:线性表L存在
操作结果:删除L中序号为i的元素,并将其值由e带回,成功返回0,出错返回-1*/
{
{
printf("postion error:\n");
return -1;
}
Datatype *q = NULL;
Datatype *p = NULL;
q = &L->data[i - 1];//删除元素位置
*e = *q;
p = &L->data[L->length - 1];//表尾位置
while (q <= p)
{
*q = *(q + 1);
q++;
}
L->length--;
return 0;
}
{
seqlist L;
InitList(&L);
int i,k=0;
Datatype e;
Datatype ee;
Datatype eee;
Datatype eeee;
for (i = 1; i <=LIST_SIZE+1; i++)
{
if (!ListInsert(&L, i, i*i))
printf("第%d个数%d插入列表\n",i, L.data[i-1]);
}
printf("the length of list is %d\n", ListLength(L));
Getelem(L, k-1, &e);
printf("第%d个数为%d\n",k, e);
if (ListEmpty(L))
printf("list is not empty\n");
printf("%d的序号是%d\n", 25, Locateelem(L, 25));
Priorelem(L, 4,&ee);
printf("%d的前一个元素是是%d\n", 4, ee);
Nextelem(L, 256, &eee);
printf("%d的后一个元素是是%d\n", 256, eee);
Listdelete(&L,1,&eeee);
printf("删除元素是%d\n", eeee);
printf("the length of list is %d\n", ListLength(L));
DestroyList(&L);
getchar();
return 0;
C语言--线性表的更多相关文章
- C语言 线性表 双向链式结构 实现
一个双向链式结构实现的线性表 duList (GCC编译). /** * @brief 线性表双向链表结构 * @author wid * @date 2013-10-28 * * @note 若代码 ...
- C语言 线性表 链式表结构 实现
一个单链式实现的线性表 mList (GCC编译). /** * @brief 线性表的链式实现 (单链表) * @author wid * @date 2013-10-21 * * @note 若代 ...
- C语言 线性表 顺序表结构 实现
一个能够自动扩容的顺序表 ArrList (GCC编译). #include <stdio.h> #include <stdlib.h> #include <string ...
- c语言线性表
#include<stdio.h> #include<time.h> #include<stdlib.h> #define MAXSIZE 20 //初始长度 ty ...
- C语言——线性表及其应用
程序要求 1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度.2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68.3.建立一 ...
- 数据结构算法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语言实现)
链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...
随机推荐
- javascript的Map使用
setExpenseAndAmountSum: function() { var detailList = vehicleVueObj.vehicleData; var expenseAmountSu ...
- Android相关视频
Android架构师 层次分析 –从顶层到底层 洞察其原理https://www.bilibili.com/video/av59066641?t=132安卓/Android 逆向破解系统班 第2期 全 ...
- Kafka集群管理工具kafka-manager
一.kafka-manager简介 kafka-manager是目前最受欢迎的kafka集群管理工具,最早由雅虎开源,用户可以在Web界面执行一些简单的集群管理操作.具体支持以下内容: 管理多个集群 ...
- nodejs命令行执行时带参数
nodejs命令行执行时带参数 转 https://www.jianshu.com/p/474e6d76f867 今天项目里突然想在初始化时跑一些数据,于是想起以前在python时可以在命令行里带 ...
- MQTT研究之EMQ:【CoAP协议的ECC证书研究】
今天研究的内容,是CoAP这个协议在EMQ消息队列的支持,CoAP是一个受限资源的协议,基于UDP实现的多用于物联网环境的通信协议.相关介绍不多说,可以看RFC. CoAP协议下,基于DTLS通信,同 ...
- C# selenium 高级
https://www.cnblogs.com/morang/p/7441091.html https://www.cnblogs.com/tobecrazy/p/4817946.html https ...
- 【Vegas原创】MAC电脑升级系统无法开机的终极解决办法
MAC OS升级Mojave .Catalina ,老一代的MacBook会产生一种情况:无法开机.按电源键没反应,会有间断性的滋滋的声音,屏幕都不亮. 终极解决方法,就一个字:等. 我升级Mojav ...
- Java学习-054-Mybatis IN查询,通过 foreach 获取列表数据
通过如下语句查询商品订单信息: ,,,) 在 Mapper.java 中定义如下接口: List<GoodsOrder> findGoodsOrderByIds(String ids); ...
- java中map和对象互转工具类的实现示例
在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,而且用起来也还算方便,比如像fastJson就可以轻松实现map ...
- k8s记录-国内下载k8s组件镜像
#!/bin/sh ### 版本信息 K8S_VERSION=v1.13.2 ETCD_VERSION=3.2.24 DASHBOARD_VERSION=v1.8.3 FLANNEL_VERSION= ...