【数据结构】顺序表的静态分配

这个博客展示了如何使用C语言实现顺序表的初始化、打印、插入、删除、查找等基本操作。通过SqList.h和SqList.c文件,定义了一个静态分配的顺序表结构,并在test.c中进行了功能测试,包括插入元素、删除元素和查找元素的示例。
摘要由CSDN通过智能技术生成

SqList.h

#include<stdio.h>
#include<stdbool.h>
#define MaxSize 10
//顺序表的实现--静态分配

typedef struct SqList
{
	int data[MaxSize];
	int size;
}SqList;


void SqListInit(SqList* ps);
void SqListPrint(SqList s);
void SqListInsert(SqList* s,int i,int e);
bool SqListFull(SqList s);
void SqListDelete(SqList* ps,int i,int* e);
bool SqListEmpty(SqList s);
int SqListSearch(SqList s, int e);

.
.
.
SqList.c

#pragma once
#include"SqList.h"


void SqListInit(SqList* ps)
{
	for (int i = 0; i < MaxSize; ++i)
	{
		ps->data[i] = 0;
	}
	ps->size = 0;

}

void SqListPrint(SqList s)
{
	for (int i = 0; i < s.size ; ++i)
		printf(" %d ", s.data[i] );
	printf("\n");
}


bool SqListFull(SqList s)
{
	return s.size >= MaxSize;
}

bool SqListEmpty(SqList s)
{
	return s.size == 0;
}


void SqListInsert(SqList* ps, int i, int e)
{
	//判断插入的位置是否合法
	if (i < 1 || i > ps->size + 1)
		return;
	if (SqListFull == 1)
		return;
	int cur=ps->size;

	//位移
	while (cur > i)
	{
		ps->data[cur] = ps->data[cur - 1];
		cur--;
	}

	//插入
	ps->data[i-1] = e;
	ps->size++;
}



void SqListDelete(SqList* ps, int i, int* e)
{
	if (i < 1 || i >= ps->size)
		return;
	if (SqListEmpty == 1)
		return;

	int cur = i;          //cur为工作指针
	*e = ps->data[i - 1];

	
	while (cur < ps->size)
	{
		ps->data[cur] = ps->data[cur + 1];
		cur++;
	}


	ps->size--;
}


int SqListSearch(SqList s, int e)
{
	if (SqListEmpty == 1)
		return -1;
	int cur = 0;
	for (; cur < s.size; cur++)
	{
		if (s.data[cur] == e)
			return cur + 1;
	}
	return -1;
 
}

.
.
.
test.c

#include"SqList.h"

void TestSqList()
{
	SqList s;
	int e = 0;
	SqListInit(&s);
	SqListPrint(s);

	//在第一个位置插入1
	SqListInsert(&s, 1, 6);
	SqListInsert(&s, 2, 0);
	SqListInsert(&s, 3, 2);


	SqListPrint(s);

	//删除第1个的值,并把值赋给e
	SqListDelete(&s, 1,&e);
	SqListPrint(s);
	printf(" e=%d", e);

	printf("\n");


	//找到第一个元素值为6的元素,并返回其位序
	
	int pos=SqListSearch(s,999);
	printf("位序为%d", pos);



}


int main()
{
	TestSqList();
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值