顺序表的操作函数

本文介绍了一个简单的线性表(SeqList)的数据结构实现,包括初始化、元素的增删查改等基本操作,并提供了完整的C语言源代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SeqList.h
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
#include <windows.h>
#define MAX_SIZE (100)

// 值类型 
typedef int DataType;

typedef struct SeqList {
	DataType array[MAX_SIZE];
	int size; // 数量 
} SeqList;

void SeqListInit(SeqList *pSL);  //初始化
void SeqListPushBack(SeqList *pSL, DataType data);  //尾部插入
void SeqListPushFront(SeqList *pSL, DataType data); // 头部插入  
void SeqListPopBack(SeqList *pSL);  // 尾部删除
void SeqListPopFront(SeqList *pSL);  // 头部删除 
void SeqListInsert(SeqList *pSL, int pos, DataType data); // 按下标插入,pos 的范围是 [0, size]  
void SeqListErase(SeqList *pSL, int pos);  // 按下标删除,pos 的范围是 [0, size)
void SeqListRemove(SeqList *pSL, DataType data);  // 按值删除,只删遇到的第一个  
void SeqListRemoveAll(SeqList *pSL, DataType data);  // 按值删除,删除所有的
void SeqListClear(SeqList *pSL);  // 清空 
int SeqListFind(SeqList *pSL, DataType data);  // 按值查找,返回第一个找到的下标,如果没找到,返回 -1 
int SeqListEmpty(SeqList *pSL);  // 判断是否为空,1 表示空, 0 表示不空 
int SeqListSize(SeqList *pSL);  // 返回数量 
void SeqListDestroy(SeqList *pSL);  // 销毁 
void SeqListPrint(SeqList *pSL);


#endif
test.c
#include "SeqList.h"

// 初始化 
void SeqListInit(SeqList *pSL)
{
	assert(pSL != NULL);
	pSL->size = 0;
}

// 尾部插入 
void SeqListPushBack(SeqList *pSL, DataType data)
{
	pSL->array[pSL->size] = data;
	pSL->size += 1;
	//SeqListInsert(pSL,pSL->size,data);
}

// 头部插入 
void SeqListPushFront(SeqList *pSL, DataType data)
{
	int i = 0;
	for (i = pSL->size; i >= 1; i--)
	{
		pSL->array[i] = pSL->array[i - 1];
	}
	pSL->array[0] = data;
	pSL->size += 1;
	//SeqListInsert(pSL,0,data);
}

// 尾部删除 
void SeqListPopBack(SeqList *pSL)
{
	assert(pSL!=NULL);
	assert(pSL->size>0);
	pSL->size--;
	//SeqListErase(pSL,pSl->size-1);
}

// 头部删除 
void SeqListPopFront(SeqList *pSL)
{
	int i = 0;
	assert(pSL!=NULL);
	assert(pSL->size>0);
	pSL->size--;
	for (i = 0; i < pSL->size; i++)
	{
		pSL->array[i] = pSL->array[i + 1];
	}
	//SeqListErase(pSL,0);
}

// 按下标插入,pos 的范围是 [0, size] 
void SeqListInsert(SeqList *pSL, int pos, DataType data)
{
	int i = 0;
	for (i = 0; i < pSL->size - pos; i++)
	{
		pSL->array[pSL->size-i] = pSL->array[pSL->size-i-1];
	}
	pSL->array[pos] = data;
	pSL->size++;
}

// 按下标删除,pos 的范围是 [0, size) 
void SeqListErase(SeqList *pSL, int pos)
{
	int i = 0;
	assert(pSL!=NULL);
	assert(pSL->size>0);
	pSL->size--;
	for (i = 0; i < pSL->size - pos; i++)
	{
		pSL->array[pos+i] = pSL->array[pos+i+1];
	}
}

// 按值删除,只删遇到的第一个 
void SeqListRemove(SeqList *pSL, DataType data)
{
	int index = SeqListFind(pSL, data);
	if (index != -1)
	{
		SeqListErase(pSL, index);
	}
}

// 按值删除,删除所有的 
void SeqListRemoveAll(SeqList *pSL, DataType data)
{
	int i = 0;
	int j = 0;
	int count = 0;
	DataType *newArray;
	newArray = (DataType *)malloc(pSL->size*sizeof(DataType));
	assert(newArray);
	for (i = 0; i < pSL->size; i++)
	{
		if (pSL->array[i] == data)
		{
			count++;
		}
		else
		{
			newArray[j] = pSL->array[i];
			j++;
		}
	}
	pSL->size -= count;
	for (i = 0; i < pSL->size; i++)
	{
		pSL->array[i] = newArray[i];
	}
	free(newArray);
}

// 清空 
void SeqListClear(SeqList *pSL)
{
	pSL->size = 0;
}

// 按值查找,返回第一个找到的下标,如果没找到,返回 -1 
int SeqListFind(SeqList *pSL, DataType data)
{
	int i = 0;
	for (i = 0; i < pSL->size; i++)
	{
		if (pSL->array[i] == data)
			return i;
	}
	return -1;
}

// 判断是否为空,1 表示空, 0 表示不空 
int SeqListEmpty(SeqList *pSL)
{
	return pSL->size == 0 ? 1 : 0;
}

// 返回数量 
int SeqListSize(SeqList *pSL)
{
	return pSL->size;
}

// 销毁 
void SeqListDestroy(SeqList *pSL)
{
	assert(pSL!=NULL);
	pSL->size = 0;
}

void SeqListPrint(SeqList *pSL)
{
	int i = 0;
	for (i = 0; i < pSL->size; i++)
	{
		printf("%d ",pSL->array[i]);
	}
	printf("\n");
}


int main()
{
	SeqList sl;
	SeqListInit(&sl);
	SeqListPushBack(&sl, 1);
	SeqListPushBack(&sl, 2);
	SeqListPushBack(&sl, 3);
	SeqListPushBack(&sl, 4);
	SeqListPrint(&sl);
	SeqListErase(&sl,2);
	SeqListPrint(&sl);
	system("pause");
	return 0;
}

 

 

 

使用c++实现的顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值