继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第1天【养成记】嵌入式挑战第1天,数据结构-线性表之顺序表1

小马人
关注TA
已关注
手记 4
粉丝 0
获赞 0

1.线性表的定义和基本操作

1.1线性表的定义

线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列
图片描述
如上图a1称为表头元素 a6称为表尾元素。除了a1每个元素有且仅有一个直接前驱,除了a6每个元素有且仅有一个直接后驱。
线性表根据不同的存储结构,划分为顺序表(顺序存储)和链表(链式存储)。

1.2线性表的基本操作

(若用L命名线性表)
初始化表。构建一个空的线性表L。
求表长。返回线性表长度,即L中元素个数。
按值查找。在表L中查找具有给定关键字值得元素。
按位查找。获取表中第i个位置的元素的值。
插入操作。在表第i个位置插入元素
删除操作。删除表中第i个位置的元素。
输出操作。按顺序输出线性表所有元素值。
判空操作。判断表是否为空。
摧毁操作。销毁线性表,并释放线性表所占用的堆区内存空间。

2.顺序表

2.1顺序表的定义

线性表的顺序存储称为顺序表,特点是表中逻辑顺序与其物理顺序相同。
假定顺序表的元素类型为ElemType,为了简单假设ElemType为int类型(ElemType类型不是重点,重要的是讨论元素之间的逻辑关系)。

typedef int ElemType;

顺序表的类型涉及如下:

#define MAX 10
typedef struct{
	ElemType data[MAX]; //线性表元素
	int length;			//线性表当前长度
}SeqList;

2.2顺序表基本操作之初始化,判满,判空,插入,输出

1.初始化

SeqList *create_empty_seqlist(){
          SeqList *l = NULL;
          l = (SeqList *)malloc(sizeof(SeqList));	//分配存放空间
           if(NULL == l)							//判空时注意NULL写前面,若写成NULL=l系统会报错
           {
                   printf("malloc is fail");
                   return NULL;
           }
          memset(l,0,sizeof(SeqList));			//内存区域全置0,非必要
          l->length = 0;
          return l;
  }

2.判满

 int is_full_seqlist(SeqList *l){
          return l->length == MAX ? 1 : 0;
}

3.判空

int is_empty_seqlist(SeqList *l){
          return l->length == 0 ? 1 : 0;
}

4.插入

依次插入
void insert_data_seqlist(SeqList *l,ElemType data){
		l->data[l->length] = data;
        l->length = l->length+1;
        return;
}
按位插入
int ListInsert(SeqList *l,ElemType data,int i){
	if(i<1||i>l->length+1)		//判断插入位置是否有效
		return 0;
	if(l->length >= MAX)
		return 0;				//存储空间已满,不能插入
	for(int j = l->length;j >= i;j--){
		//将第i个元素及之后元素后移
		l->data[j]=l->data[j-1]
	}
	l->data[i-1]=data;
	l->lenght++;
	return 1; 
}

5.输出

void printf_data_seqlist(SeqList *l){
		for(int i = 0;i < l->length;i++){
                printf("%d\n",l->data[i]);
        }
        printf("\n");
 }
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP