顺序表的创建,插入,删除,查找,逆序以及合并两个有序的顺序表

本文详细介绍了如何使用C语言实现顺序表的各种操作,包括顺序表的创建、插入元素(尾部、头部、指定位置)、删除元素(按位置、按数据)、查找元素、逆序排列以及如何合并两个有序的顺序表。通过SeqList.h和SeqList.c文件展示了具体实现,并提供了main.c文件作为测试用例。
摘要由CSDN通过智能技术生成

SeqList.h文件:

#ifndef __SEQLIST_H__

#define __SEQLIST_H__


#define FALSE  -1
#define TRUE    0


#define INIT_SIZE     100
#define INCRESS_SIZE  20  




typedef int SeqData;


// 顺序表结构
typedef struct _seqList
{
SeqData *list;  // 指向存储空间的指针
int max_len;       // 保存存储空间最大长度
int len;           // 保存当前使用的长度
}SeqList;




// 创建顺序表
SeqList *Create_List();


// 销毁顺序表
void Destroy(SeqList *s);


// 插入数据:尾插法
int Insert_Last(SeqList *s, SeqData data);


// 插入数据:头插法
int Insert_Head(SeqList *s, SeqData data);


// 插入数据:在下标为 pos 的位置插入数据
int Insert_Pos(SeqList *s, int pos, SeqData data);


int GetData(SeqList *s, int pos, SeqData *x);


// 查找元素,如果找到,将该元素的下标给x
int FindData(SeqList *s, SeqData data, SeqData *x);


// 删除 pos 下标的元素
int Delete_Pos(SeqList *s, int pos);


// 删除指定数据
int Delete_Data(SeqList *s, SeqData data);


// 逆序
int Reverse_List(SeqList *s);


// 将两个顺序表合并成一张顺序表
// 前提:两张表都是排好序表
// 合并后的表要求是从小到大排列的,函数返回新表的指针
SeqList * Merge_List(SeqList *s1, SeqList *s2);


void Display(SeqList *s);


#endif // __SEQLIST_H__



SeqList.c文件:

#include "SeqList.h"
#include <stdlib.h>
#include <stdio.h>


SeqList *Create_List()
{
// 创建一个顺序表
SeqList* s = (SeqList*)malloc(sizeof(SeqList)/sizeof(char));
if (s == NULL)
{
return NULL;
}

// 初始化顺序的成员
// 为顺序表分配存储空间
s->list = (SeqData *)malloc(sizeof(SeqData)/sizeof(char)*INIT_SIZE);
if (s->list == NULL)
{
free(s);  // 创建存储空间失败,先释放顺序表结点
return NULL;
}
s->max_len = INIT_SIZE;
s->len = 0;

return s;
}


void Destroy(SeqList *s)
{
if (s == NULL)
return;

// 先释放存储空间
free (s->list);

// 释放顺序表
free (s);
}


int AgainMalloc(SeqList *s)
{
if (s == NULL)
return FALSE;

// 新申请空间的字节数
int new_size = sizeof(SeqData)/sizeof(char)*(INIT_SIZE + INCRESS_SIZE);
SeqData* tmp = (SeqData*)realloc(s->list, new_size);
if (tmp == NULL)
{
return FALSE;
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值