首页 > 其他分享 >关于一个简单的顺序表代码

关于一个简单的顺序表代码

时间:2024-08-02 14:25:35浏览次数:11  
标签:ps 顺序 int 代码 简单 SLnode printf void size

1.首先是头文件SeqList.h的代码:

#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef int SXBint;
typedef struct SL
{
	SXBint* a;
	int size;
	int capacity;
}SLnode;
//初始化
void SeqLsitInit(SLnode* ps);
//尾插
void SeqPushback(SLnode* ps, SXBint x);
//头插
void SeqPushFront(SLnode* ps, SXBint x);
//打印
void Seq_dayin(SLnode ps);
//尾删
void SeqListPopbank(SLnode* ps);
//头删
void SeqListPopFront(SLnode* ps);
//指定插入
void SeqlList_charu(SLnode* ps, int pos, SXBint x);
//指定删除
void SeqList_shan(SLnode* ps, int pos);
//销毁
void SeqList_xiaohui(SLnode* ps);
//查找
int SeqList_chazhao(SLnode* ps, SXBint x);
//修改
void SeqList_xiugai(SLnode* ps, int pos, SXBint x);

2.源文件SeqList.c的实现方法函数的代码

#include"SeqList.h"
//初始化
void SeqLsitInit(SLnode* ps)
{
	ps->a = NULL;
	ps->capacity = ps->size = 0;
}
//申请空间
void kuorong(SLnode* ps)
{
	if (ps->capacity == ps->size)
	{
		int Newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
		SXBint* temp = (SXBint*)realloc(ps->a, sizeof(SLnode) * Newcapacity);
		if (temp == NULL)
		{
			perror("error:");
			exit(1);
		}
		ps->a = temp;
		ps->capacity = Newcapacity;
	}
}
//尾插
void SeqPushback(SLnode* ps, SXBint x)
{
	assert(ps);
	kuorong(ps);
	ps->a[ps->size++] = x;
}
//打印数据
void Seq_dayin(SLnode ps)
{
	for (int i = 0; i < ps.size; i++)
	{
		printf("%d->", ps.a[i]);
	}
	printf("NULL\n");
}
//头插
void SeqPushFront(SLnode* ps, SXBint x)
{
	assert(ps);
	kuorong(ps);
	for (int i = ps->size; i >= 0; i--)
	{
		ps->a[i+1] = ps->a[i];
	}
	ps->a[0] = x;
	ps->size++;
}
//尾删
void SeqListPopbank(SLnode* ps)
{
	assert(ps);
	ps->size--;
}
//头删
void SeqListPopFront(SLnode* ps)
{
	assert(ps);
	for (int i = 0; i < ps->size - 1; i++)
	{
		ps->a[i] = ps->a[i+1];
	}
	ps->size--;
}
//指定插入
void SeqlList_charu(SLnode* ps, int pos, SXBint x)
{
	assert(ps);
	assert(pos < ps->size);
	kuorong(ps);
	for (int i = ps->size; i >= pos; i--)
	{
		ps->a[i + 1] = ps->a[i];
	}
	ps->a[pos] = x;
	ps->size++;
}
//指定删除
void SeqList_shan(SLnode* ps, int pos)
{
	assert(pos < ps->size);
	int start = pos + 1;
	while (start < ps->size)
	{
		ps->a[start - 1] = ps->a[start];
		++start;
	} 
	ps->size--;
} 
//销毁
void SeqList_xiaohui(SLnode* ps)
{
	free(ps->a);
	ps->a = NULL;
	ps->capacity = ps->size = 0;
}
//查找
int SeqList_chazhao(SLnode* ps, SXBint x)
{
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->a[i] == x)
		{
			return i;
		}
	}
	return -1;
}
//修改
void SeqList_xiugai(SLnode* ps, int pos, SXBint x)
{
	assert(pos < ps->size);
	assert(ps);
	ps->a[pos] = x;
}

3.测试的源文件test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"SeqList.h"
void menu()
{

	printf("\n*********************\n");
	printf("1.尾插数据 2.头插入数据\n");
	printf("3.尾删数据 4.头删数据\n");
	printf("5.打印数据 6.修改数据\n");
	printf("7.指定插入 8.指定删除\n ");
	printf("9.查找     10.退出   \n");
	printf("*******************\n");
	printf("\n请输入你的操作\n");
}
int main()
{
	SLnode S;
	SeqLsitInit(&S);
	int x = 0, pos;
	int input = 0;
	do
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("请输入x的值,输入-1结束尾插数据\n");
			do
			{
				scanf("%d", &x);
				if (x!=-1)
				{
					SeqPushback(&S, x);
				}
			} while (x!=-1);
			break;
		case 2:
			printf("请输入x的值,输入-1结束头插\n");
			do
			{
				scanf("%d", &x);
				if (x != -1)
				{
					SeqPushFront(&S, x);
				}
			} while (x != -1);
			break;
		case 3:
			SeqListPopbank(&S);
			printf("尾删成功\n");
			break;
		case 4:
			SeqListPopFront(&S);
			printf("头删成功\n");
			break;
		case 5:
			Seq_dayin(S);
			break;
		case 6:
			printf("请输入你要修改的数据位置\n");
			scanf("%d", &pos);
			printf("请输入你要修改的数\n");
			scanf("%d", &x);
			SeqList_xiugai(&S, pos, x);
			printf("修改成功\n");
			break;
		case 7:
			printf("请输入你要指定插入的位置\n");
			scanf("%d", &pos);
			printf("请输入你要插入的数\n");
			scanf("%d", &x);
			SeqlList_charu(&S, pos, x);
			printf("插入成功\n");
			break;
		case 8:
			printf("请输入你要删除的位置下标\n");
			scanf("%d", &x);
			SeqList_shan(&S, x);
			break;
		case 9:
			printf("请输入你要查找的数\n");
			scanf("%d", &x);
			int ret = SeqList_chazhao(&S, x);
			if (ret != -1)
			{
				printf("找到了,下标为%d", ret);
			}
			else {
				printf("找不到\n");
			}
			break;
		case 10:
			input = -1;
			printf("退出中....");
			break;
		default:
			printf("请输入有效数字\n");
			break;
		}
	} while (input != -1);
	return 0;
}

标签:ps,顺序,int,代码,简单,SLnode,printf,void,size
From: https://blog.csdn.net/2305_78057683/article/details/140793240

相关文章

  • 代码实现yolov3主干网络,可以直接运行
    目录 1.主干网head版本1 2.主干网head版本2 3.将网络层全部放入数组切片取输出 4.用循环写法将输入输出提取出来yaml文件 1.主干网head版本1importtorchfromtorchimportnnimporttorch.nn.functionalasFclassConvBnLeakRelu(nn.Module):de......
  • 随机森林的可解释性分析(含python代码)
    随机森林的可解释性分析1.引言可解释性的重要性2.随机森林的原理2.1基本原理:2.2随机森林的实现3.随机森林的可解释性分析3.1特征重要性3.2特征重要性3.3SHAP值3.4部分依赖图(PDP)3.5交互特征效应3.6变量依赖图4.结论5.参考文献1.引言在机器学习领域,随机森林......
  • .NET Core 8 部署在 IIS 的简单三步
    .NETCore8部署在IIS的简单三步.NET 部署 IIS 的简单步骤一:下载dotnet-hosting-x.y.z-win.exe,下载地址:.NETDownloads(Linux,macOS,andWindows)(microsoft.com) .NET 部署 IIS 的简单步骤二:选择对应的版本,点击进入详细页,如8.0的版本:版本最好和你......
  • 代码随想录day17 || 654 最大二叉树,617 合并二叉树,700 二叉搜索树搜索,98 验证二叉搜索
    645最大二叉树funcconstructMaximumBinaryTree(nums[]int)*TreeNode{ //思路,算法思路基本等同于通过中序前序构造二叉树 //1,取最大值作为根节点 //2,切割数组 //3,递归左右子树 iflen(nums)==0{ returnnil } //切割数组取最大值 max,left,right:=......
  • GitHub Star 数量前 15 的开源低代码项目
    上周,我们发布了文章《GitHubStar数量前12的开源无代码工具》,收获了许多喜爱。许多朋友留言问,为什么n8n、Appsmith等熟知的产品没有上榜?原因是我们是根据GitHub上的"no-code"标签来制作这份名单的,而这两款产品只打上了“low-code”标签。今天这篇文章,我们将盘点低代码......
  • 代码随想录算法训练营第二十一天| 39. 组合总和, 40.组合总和II, 131.分割回文串
    今天是回溯算法学习的第二天,主要的学习内容包括:1.组合问题的重复使用2.组合问题的去重3.分割问题的处理方法。39.组合总和题目链接:39.组合总和-力扣(LeetCode)这个组合问题的特点是,集合内的元素可以重复使用。与前面组合问题的区别在于,在每一次回溯中,不是从i+1的位置开......
  • chapter5------编写主引导扇区代码
    主引导扇区(MainBootSector,MBR)什么是主引导扇区:处理器加电或者复位之后(简单来说就是启动计算机),如果硬盘是首选的启动设备,那么ROM-BIOS(基本输入输出系统)将试图读取硬盘的0面0道1扇区(简单来说就是第一个扇区),这就是主引导扇区主引导扇区的特点:扇区数据仅有512字节......
  • 代码随想录算法训练营第57天 | 并查集理论基础
    并查集理论基础https://www.programmercarl.com/kamacoder/图论并查集理论基础.html107.寻找存在的路径https://kamacoder.com/problempage.php?pid=1179代码随想录https://www.programmercarl.com/kamacoder/0107.寻找存在的路径.html#思路并查集理论基础并查集用于判断......
  • web小游戏开发:拼图(完)完整代码展示
    web小游戏开发:拼图(完)关于不规则图形拼图的讨论CANVASdrawImage踩坑第一个坑,canvas内置画布的宽高和实际显示的宽高没有关联第二个坑,来源图片的尺寸切割不规则图形完整代码htmlcssjs关于不规则图形拼图的讨论在开始制作这个拼图之前,我们就已......
  • SourceGenerator 生成db to class代码优化结果记录
    优化上一次实验代码写的较为随意,本次穷尽所学,优化了一把,不过果然还是没比过Dapperaot,虽然没使用Interceptor,但理论上其优化不该有这么大差距知识差距不少呀,都看不懂Dapperaot利用了什么姿势领先,有大神们能教教吗?优化点减少类型判断提前做类型判断,并在生成时利用......