数据结构:顺序表的实现
创始人
2024-11-20 16:09:34

1.SeqList.h  头文件

#pragma once #include  #include  #include  //定义动态顺序表 typedef int SLDatatype;  typedef struct SeqLlist { 	SLDatatype* arr; 	int capacity; 	int size; }SL;  //typedef struct SeqList Sl;  //初始化 void SLInit(SL* ps);  //销毁 void SLDestory(SL* ps);  //尾插入数据 void SLPushBack(SL* ps,SLDatatype x);  //打印顺序表 void SLPrint(SL* ps);  //头插 void SLPushFront(SL* ps,SLDatatype x);   //删除 void SLPopBack(SL* ps); void SLPopFront(SL* ps);  //在指定位置之前插入数据 void SLInsert(SL* ps, SLDatatype x, int pos); //删除指定位置的数据 void SLErase(SL* ps, int pos);  //查找数据 int SLFind(SL* ps, SLDatatype x);  

2.SeqList.c文件

#include "Seqlist.h"  //初始化 //错误1:使用了未初始化的局部变量“s” //void SLInit(SL s)--值传递 void SLInit(SL* ps) { 	ps->arr = NULL; 	ps->capacity = ps->size = 0; }  //判断空间是否充足 void SLCheckCapacity(SL* ps) { 	if (ps->size == ps->capacity) { 		//增容0*2=0 		//若capacity为0,给个默认值,否则*2 		int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity; 		SLDatatype* tmp = (SLDatatype*)realloc(ps->arr, newCapacity * sizeof(SLDatatype)); 		if (tmp == NULL) 		{ 			perror("realloc faile!"); 			exit(1); 		} 		ps->arr = tmp; 		ps->capacity = newCapacity; 	} }  //尾插 void SLPushBack(SL* ps,SLDatatype x) {  	//温柔的解决方式 	//if (ps == NULL) 	//{ 	//	return; 	//} 	//粗暴的解决方式 	assert(ps);  	SLCheckCapacity(ps); 	ps->arr[ps->size] = x; 	ps->size++; } //打印操作 void SLPrint(SL* ps) { 	for (int i = 0; i < ps->size; i++) 	{ 		printf("%d ", ps->arr[i]); 	} 	printf("\n"); }  //头插 void SLPushFront(SL* ps,SLDatatype x) { 	assert(ps); 	//判断空间是否足够 	SLCheckCapacity(ps);  	//数据整体后移动1位 	for (int i = ps->size; i > 0; i--) 	{ 		ps->arr[i] = ps->arr[i - 1]; 	} 	//下标为0的位置空出来 	ps->arr[0] = x; 	ps->size++; }  //销毁 void SLDestory(SL* ps) { 	if (ps->arr != NULL) 	{ 		free(ps->arr); 	} 	ps->arr = NULL; 	ps->capacity = ps->size = 0; } //删除 void SLPopBack(SL* ps) { 	assert(ps); 	assert(ps->size); 	ps->arr[ps->size - 1] = 0; 	ps->size--;  }  void SLPopFront(SL* ps) {  	assert(ps); 	assert(ps->size);  	//数据整体向前挪动一个位置 	for (int i = 0; i < ps->size - 1; i++) 	{ 		ps->arr[i] = ps->arr[i + 1]; 	} 	ps->size--; }  //在指定位置之前插入数据(空间足够才能插入数据) void SLInsert(SL* ps, SLDatatype x, int pos) { 	assert(ps); 	assert(pos >= 0 && pos <= ps->size); 	SLCheckCapacity(ps);  	//pos之后的数据向后移动一位 	for (int i = ps->size; i > pos; i--) 	{ 		ps->arr[i] = ps->arr[i-1]; 	} 	ps->arr[pos] = x; 	ps->size++; } //删除指定位置的数据 void SLErase(SL* ps, int pos) { 	assert(ps); 	assert(pos >= 0 && pos <= ps->size);  	//pos之后的数据整体向前移动1位 	for (int i = 0; i < ps->size - 1; i++) 	{ 		ps->arr[i] = ps->arr[i + 1]; 	} 	ps->size--; }  //查找数据 int SLFind(SL* ps, SLDatatype x) { 	assert(ps); 	for (int  i = 0; i < ps->size; i++) 	{ 		if (ps->arr[i] = x) 		{ 			return i; 		} 	} 	//没有找到,返回一个无效的下标 	return -1; }

3.test.c文件

#include "Seqlist.h"  void SLtest01() { 	SL s; 	SLInit(&s);  	//SLPushBack(&s, 1); 	//SLPushBack(&s, 2); 	//SLPushBack(&s, 3); 	//SLPushBack(&s, 4); 	//SLPushBack(&s, 5); 	//SLPushBack(&s, 6); 	//SLPushBack(NULL, 6);  	SLPushFront(&s, 1); 	SLPushFront(&s, 2); 	SLPushFront(&s, 3); 	SLPushFront(&s, 4);  	//尾删除 	//SLPopBack(&s); 	//SLPopBack(&s); 	//SLPopBack(&s); 	//SLPopBack(&s); 	//SLPopBack(&s);  	//头删除 	//SLPopFront(&s); 	//为空不能删除  	//SLInsert(&s,11,0); 	//SLInsert(&s,22,s.size);  	//SLErase(&s, 0); 	//SLErase(&s, s.size-1);  	SLPrint(&s); 	//查找数据 	int find = SLFind(&s, 2); 	if (find >= 0) 	{ 		printf("找到了\n"); 	} 	else 	{ 		printf("没有找到\n"); 	}  } int main() { 	SLtest01(); 	return 0; }

相关内容

热门资讯

第五届琶洲算法大赛开启全球报名... 中新社广州5月6日电 (记者 许青青)由广州市政府主办的第五届琶洲算法大赛6日正式启动报名并上线了首...
软件性能测试包含哪些测试内容? 性能测试报告 性能测试是对软件产品在特定条件下的性能进行测试和评估的过程。性能测试的内容可以包括以下...
胜硅来新材料取得金属硅粉用除铁... 国家知识产权局信息显示,河南胜硅来新材料科技有限公司取得一项名为“一种金属硅粉用除铁生产系统”的专利...
工业和信息化部批复开展卫星物联... 工业和信息化部日前正式批复开展卫星物联网业务商用试验,试验期为两年。 据了解,本次获批开展卫星物联网...
月球新矿物“铈嫦娥石”是怎么被... 本文转自【央视新闻客户端】; 近日,我国宣布发现三种月球新矿物:铈嫦娥石、镁嫦娥石、铈镁嫦娥石。其中...