文档章节

线性表的基本操作

行走的思想者
 行走的思想者
发布于 2016/04/01 17:01
字数 585
阅读 5
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

                最近学习了数据结构,在这几天主要学习了线性表。它的定义如下:线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。在这里写了线性表的初始化,赋值,删除等操作。具体的会再补充。

#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
# define    LIST_INIT_SIZE       100

# define    LISTINCREMENT    10

# define TRUE 1
# define FALSE 0 
# define OK 1
# define ERROR 0
# define INFEASIBLE -1
# define OVERFLOW -2

typedef int  Status;
typedef int  ElemType;
//定义线性表的相关属性
typedef    struct {
         ElemType     * elem;//列表的地址
         int          length ; // 表长,初始为 0
         int        listsize ;// 表存储容量
} SqList ;
//初始化线性表
Status   InitList_Sq ( SqList  *L) {
L->elem = ( ElemType * ) malloc
                         ( LIST_INIT_SIZE * sizeof(ElemType) );
if  ( ! L->elem )   exit(OVERFLOW) ;
L->length = 0 ;
L->listsize = LIST_INIT_SIZE ;
return  OK ;
}
// 对线性表进行i位之前插入数值
Status   Insert_sq(SqList *L,int i ,ElemType e){
	int *newbase,*q,*p ;

	//对于插入的i位置进行判定
	if(i<1||i>L->length) return ERROR ;
    //如果分配空间不足,重新添加分配空间
	if(L->length>=L->listsize){
	 newbase  = (ElemType*)realloc(L->elem,(L->listsize+ LISTINCREMENT)*(LISTINCREMENT));
	 if(!newbase) exit(OVERFLOW) ;//分配失败
	 L->elem = newbase;
	 L->listsize += LISTINCREMENT ;
	}
	
	//进行表中的元素后移
	q = &(L->elem[i-1]);
	for(p = &(L->elem[L->length-1]);p>=q;--p)
		*(p+1)= * p ;
	//插入e的值
	*q = e ;//赋值
	++L->length;//表长加1
	return OK;
}

//获取线性表I位的数值,返回到e中
Status GetElem(SqList *L,int i ,ElemType e){
    //判断i的值是否合法
	int a ;
	if((i<1)||(i>L->length+1)) return ERROR ;
	for( a= 0 ;a<L->length-1;a++){
		if(a==i){
	     e = L->elem[a] ;
		 break;
		}
		}
	return e ;
}
//删除
Status Delete(SqList *L,int i ,ElemType e){
      ElemType *p,*q;
	 if((i<1)||(i>L->length+1)) return ERROR ;
	    e = L->elem[i-1] ; //把删除的i的值赋给e
	    p = &(L->elem[i-1]);//i为的地址
        q = (L->elem) +(L->length-1) ;//表尾的位置
		//被删除的元素之后的元素右移
 		for(++p;p<=q;++p)
		   *(p-1) = *p;
		   --L->length;//表长减1 
		   return OK;
	  }

int main()
{
	Status   InitList_Sq ( SqList  *L );
    SqList  L;
	int j=1;
	int i;
	int a ;
    InitList_Sq ( &L );

   //对表进行赋值
	for(i=1;i<=6;i++){
	scanf("%d",&L.elem[i-1]);
	 ++L.length;
	}
	//输出表中的值
	for(j=1;j<=6;j++)
     printf("%d",L.elem[j-1]);
	
}


© 著作权归作者所有

行走的思想者
粉丝 0
博文 15
码字总数 35851
作品 0
济南
私信 提问
数据结构的基本操作问题,求代码.要能调试成功的哦.

实验一 线性表操作 实验目的 1、 会定义线性表的顺序存储类型。 2、 熟悉C或C++程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。 3、 熟悉对线性表的...

miui
2012/05/06
972
7
线性表

1、线性表的定义 线性表(List):零个或多个数据元素的有限序列 第一个元素无前驱,最后一个元素无后继,其他元素都有且只有一个前驱和后继。然后,线性表强调是有限的, 线性表元素的个数n...

DWade_Coding
2017/11/08
0
0
数据结构——第一章线性表:01线性表的逻辑结构

1.线性结构的基本特征:线性结构是一个数据元素的有序集。 (1)集合中必定存在一个唯一的“第一元素” (2)集合中必定存在一个唯一的“最后元素” (3)除最后一个元素外,集合中的元素均有...

H36Phaeton
2018/10/29
0
0
小蚂蚁学习数据结构(15)——串的认识

概念: 串(字符串):是由0个或多个字符组成的有限序列。 由双引号括起来 如: char str[] = "abcd"; 串相等的条件: 只有当两个串的长度相等,并且各个对应位置的字符都相等时才相等。 串的...

嗜学如命的小蚂蚁
2016/01/15
91
2
C语言 数据结构与算法 线性表

数据结构中逻辑结构分线性和非线性。 线性表即为线性结构中的一种。 线性表的特性 百度百科解释在此。 个人总结为 有始有终,顺序排列,首尾不相连(像火车一样)。 线性表的基本操作如下: ...

起什么name呢
2016/03/23
60
0

没有更多内容

加载失败,请刷新页面

加载更多

mars-config 动态配置管理

mars-config 码云地址:https://gitee.com/fashionbrot/mars-config 介绍 spring mvc 、springboot 动态配置系统。http 轮训方式 更新 动态配置 软件架构 软件架构说明 后端使用技术 :sprin...

fashionbrot
17分钟前
9
0
女朋友玩吃鸡手游被开挂老哥骗炮,我见义勇为将骗子绳之以法

大家好,我是乔哥。 晚上10点以后下班后我回到自如出租房里面,开始处理公众号粉丝发来的消息,一条一条处理,突然看到了这么几条消息,吸引了我的眼球: 然后我就和这位女粉丝小红(化名)聊...

gzc426
22分钟前
3
0
两款软件

fadetop保护眼睛软件 Snipaste截图软件

伟大源于勇敢的开始
49分钟前
6
0
06.全局锁和表锁

根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。 全局锁 全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是flush tables with read lock(FTW...

scgaopan
今天
7
0
图解安装CentOS8

最近正式发布了CentOS8!迫不及待地准备下载了CentOS8镜像,准备体验下,工作繁忙无暇理会。 今天抽空安装体验下~ 可从CentOS官网下载:https://centos.org/download/ 为了快速可以选择从国...

技术训练营
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部