首页 > 其他分享 >数据结构:线性表的顺序表实现

数据结构:线性表的顺序表实现

时间:2024-09-11 19:55:15浏览次数:14  
标签:顺序 return 线性表 int SeqList list DataType 数据结构 size

顺序表的操作:

这里采用了结构体和指针的部分知识

//自定义结构体 
typedef struct{
	DataType list[Maxsize];
	int size;
}SeqList;

void ListInitiate(SeqList*L) {
	L->size=0;
}

int ListLength(SeqList L){
	return L.size;
}
//插入是从前往后移动 
int ListInsert(SeqList *L,int i,DataType x){
	int j;
	if(L->size>=Maxsize){
		printf("顺序表已满无法插入!\n");
		return;
	}
	else if(i<0||i>L->size){
		printf("参数i不合法");
		return 0;
	}
	else{
		for(j=L->size;j>i;j--){
			L->list[j]=L->list[j-1];
			L->list[i]=x;
			L->size++;
			return 1;
		}
	}
}
//删除是从后往前移动 
int ListDelete(Seqlist *L,int i,DataType *x){
	int j;
	if(L->size<=0){
		printf("顺序表无空元素可以删除");
		return 0;
	}
	else if(i<0||i>L->size-1) {
		printf("不合法");
		return 0;
	}
	else{
		*x=L->list[i];
		for(j=i+1,j<=L->size-1,j++){
			L->list[j-1]=L->list[j];
			L->size--;
			return 1;
		}
	}
}
//取元素
int ListGet(SeqList L,int i,DataType *x) {
	//取顺序表L中第i个元素存于X中,成功返回1,失败返回0
	if(i<0||i>L.size-1) {
		printf("参数i不合法\n");
		return 0;
	}
	else{
		*x=L.list[i];
		return 1;
	}
}

注意点: 

1.插入操作是将元素从前往后移动的,而删除操作是将元素从后往前移动,填补空缺。

2.要注意函数参数传递的类型是普通参数还是指针,若为指针则应该传递地址值。

顺序表操作的实现:

//eg题: 以上方法实现:建立一个线性表,首先依次输入元素123...10,
//然后删除元素5 ,最后依次显示当前线性表中的元素 。 
#define MaxSize 100
typedef int DataType ;
void main(void){
	SeqList myList;
	int i,x;
	ListInitiate(&myList);
	for(i=0;i<10;i++)
		ListInsert(&myList,i,i+1);
	ListDelete(&myList,4,&x) ;
	
	//显示顺序表当前元素
	for(i=0;i<ListLength(myList);i++) {
		ListGet(myList,i,&x);
		printf("%d  ",x);
	}
}

注意点:

1.在设计顺序表时可以使用没有具体数值的MaxSize,但在设计程序时,必须具体定义MaxSize的数值,否则,系统无法为主函数中的变量myList的数组分配具体的存储空间

2.设计程序时必须定义抽象数据类型DataType为已知数据类型

标签:顺序,return,线性表,int,SeqList,list,DataType,数据结构,size
From: https://blog.csdn.net/2301_79744217/article/details/142148509

相关文章

  • 类的执⾏顺序?
    在C#中,类的执行顺序取决于你如何组织和调用代码。以下是类中代码执行的一般顺序:静态构造函数:如果类包含静态构造函数,它将在类首次被引用时执行,且仅执行一次。静态构造函数常用于初始化静态成员。实例构造函数:当创建类的实例时,实例构造函数将被调用。如果类继承自......
  • 算法与数据结构——图的基础操作及图的遍历(广度优先与深度优先)
    图的实现基于邻接矩阵的实现给定一个顶点数量为n的无向图:初始化:传入n个顶点,初始化长度为n的顶点列表vertices,使用O(n)时间;初始化n*n大小的邻接矩阵adjMat,使用O(n2)时间。添加或删除边:直接在邻接矩阵中修改指定的边即可,使用O(1)时间。而由于是无向图,因此需要同时更新两个......
  • Java中的线程优先级与调度:如何有效管理线程的执行顺序
    Java中的线程优先级与调度:如何有效管理线程的执行顺序大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java中,线程的优先级和调度策略对于高效管理线程执行顺序至关重要。通过合理地设置线程优先级和调度策略,可以有效地优化应用的性能和响应时间。本......
  • 可持久化数据结构
    可持久化线段树看这个。可持久化字典树最大异或和考虑设\(s\)为\(a\)的前缀异或和数组,我们最终的答案就是找一个\(p\in[l-1,r-1]\),然后求出\(s_n\operatorname{xor}x\operatorname{xor}s_p\)。首先,对于最大异或数对问题,可以使用\(01\)\(trie\)解决,这里不再赘述。......
  • C++入门基础知识59——【关于C++数据结构】
    成长路上不孤单......
  • SQL执行顺序和逻辑
    SQL执行顺序和逻辑MySQL的执行顺序:  (9)SELECT  (6)SUM(聚合函数)  (10)DISTINCT<select_list>  (1)FROM<left_table>  (3)<join_type>JOIN<right_table>  (2)ON<join_condition>  (4)WHERE<where_condition>  (5)GROUP......
  • Python数据结构集合的相关介绍
    集合是一种无序、可变的数据结构,它也是一种变量类型,集合用于存储唯一的元素。集合中的元素不能重复,并且没有固定的顺序。在Python提供了内置的 set 类型来表示集合,所以关键字set就是集合的意思。你可以使用大括号 {} 或者 set() 函数来创建一个集合。my_set={1,2,......
  • 重头开始嵌入式第三十七天(数据结构 链表)
    单向链表单向链表是一种常见的数据结构。一、结构组成-节点:单向链表由多个节点组成。每个节点包含两个部分,一个是存储数据的部分,可以存储各种类型的数据,如整数、字符、结构体等;另一个是指向下一个节点的指针,用于连接链表中的各个节点。-头指针:链表有一个特殊的指针称为头......
  • 数据结构实验报告1(集合)
    学习目标:        掌握抽象数据类型的表示与实现方法。学习内容:        描述一个集合的抽象数据类型ASet,其中所有元素为整数且所有元素不相同,集合的基本操作包括:由整数数组a[0..n-1]创建一个集合。输出集合中的所有元素。判断一个元素是否在一个集合中。求......
  • 数据结构—链表
    一:链表1、数组是连续的内存空间;而链表可以不一定是连续的内存空间2、单端链表;从前一个元素指向后一个元素3、链表的功能(1)访问o(n):数组是通过下表或者索引访问元素;链表是通过next指针以此递归的进行查询判断(2)搜索o(n):从头部遍历;知道找到位置(3)插入o(1):(4)删除o(1):4、特......