【自学】数据结构-顺序表的操作(详细)

一、顺序表概述

 所谓的顺序,指的是线性结构的顺序存储。

所谓的顺序表,指的是采用连续存储空间存储数据元素,类似于C语言中的数组,可以通过存储空间的序号表示线性表中元素的关系。

二、顺序表的操作

 顺序表的操作主要为增、删、改、查等,主要操作如下:

环境:Linux系统下

定义和创建:

common.h

#ifndef _COMMON_H_
#define _COMMON_H_

typedef int data_t;//定义数据的类型为int型
#define MAXN 10
typedef struct sqlist{
        data_t data[MAXN];//构建顺序表的数据记录存储空间
        int last;//顺序表中数据存储从序号为0位置开始存储,最后一条数据记录的存储位置使用last表示
} sqlist_t;
sqlist_t *CreateSqList(void);//创建
int InsertSqList(sqlist_t *list, int local, data_t mydata);//插入
void DisplaySqList(sqlist_t *list);//遍历
int DeleteSqList(sqlist_t *list,  int local);//删除
int SearchSqList(sqlist_t *list,int local, data_t *mydata);//查询
int ChangeSqList(sqlist_t *list,int local, data_t mydata);//修改

void ClearSqList(sqlist_t *list);
void DestorySqList(sqlist_t **list);
int isFullSqList(sqlist_t *list);
int isEmptySqList(sqlist_t *list);

#endif

具体函数的实现如下:

sqlist.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "common.h"
//创建顺序表
sqlist_t *CreateSqList(void)
{
	sqlist_t *list;//创建顺序表list
	list = malloc(sizeof(sqlist_t));//分配空间
	if(list == NULL)//判断表是否为空
		return NULL;
	memset(list,0,sizeof(sqlist_t));//初始化表
	list->last = -1;

	return list;
}
//向顺序表中插入元素
int InsertSqList(sqlist_t *list, int local, data_t mydata)
{
	//没有表
	if(list == NULL)
	{
		return -1;
	}
	//表满
	if(list->last == MAXN-1)
	{
		return -1;
	}
	//表插入的位置不满足
	if(local<0 || local>list->last+1)
	{
		return -1;
	}
	//找到要插入的位置,将插入位置后面的元素向后移,插入元素
	for(int i = list->last;i>=local;i--)
	{
		list->data[i+1]=list->data[i];
	}
	list->data[local] = mydata;
	list->last++;

	return 0;
}
//遍历顺序表
void DisplaySqList(sqlist_t *list)
{
	//没有表
	if(list == NULL)
		return -1;
	//遍历表,打印数据
	for(int i=0; i<list->last; i++)
		printf("%d",list->data[i]);
	printf("\n");
}
//删除顺序表中的某个元素
int DeleteSqList(sqlist_t *list, int local)
{
	//没有表
	if(list == NULL)
		return -1;
	//表为空,无法删除
	if(list->last == -1)
	{
		return -1;
	}
	//删除位置不满足
	if(local<0 || local>list->last)
		return -1;
	//删除位置后面的元素向前移,覆盖删除的位置
	for(int i=local;i<list->last;i++)
		list->data[i] = list->data[i+1];
	list->last--;
	return 0;

}
//查找顺序表中的某个元素
int SearchSqList(sqlist_t *list,int local, data_t *mydata)
{
	//表为空,没有表
	if(list == NULL)
		return -1;
	//表为空
	if(list->last == -1)
		return -1;
	//没有在满足要求的位置
	if(local<0 || local>list->last)
		return -1;
	*mydata = list->data[local];
	return 0;
}
//修改顺序表中的某个元素
int ChangeSqList(sqlist_t *list,int local, data_t mydata)
{
	//没有表
	if(list == NULL)
		return -1;
	//表中没有元素
	if(list->last == -1)
		return -1;
	//不满足要求的位置
	if(local<0 || local>list->last)
		return -1;
	list->data[local] = mydata;

	return 0;
}
//清空顺序表
void ClearSqList(sqlist_t *list)
{
	list->last = -1;
}
//释放顺序表
void DestorySqList(sqlist_t **list)
{
	free(*list);
	*list = NULL;
}
//判断顺序表是否满
int isFullSqList(sqlist_t *list)
{
	return (list->last == MAXN-1);
}
//判断顺序表是否空
int isEmptySqList(sqlist_t *list)
{
	return (list->last == -1);
}

 编写主函数,就可以调用定义好的函数了:

main.c

#include <stdio.h>
#include "common.h"
int main()
{
        int i;
        sqlist_t *list;
        data_t mydata;

        list = CreateSqList();
        if (list == NULL)
                return -1;

        i = 5;
        while(i) {
                printf("insert %d - %d\n", i, InsertSqList(list, 0, i));
                i--;
        }
        DisplaySqList(list);
        DeleteSqList(list,4);
        DisplaySqList(list);
        ......//可以自行调用
}

三、最后编译

gcc sqlist.c main.c

./a.out

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值