数据结构:顺序表

文章提供了一个C语言实现的顺序链表操作的头文件`sqlist.h`,包括链表的创建、判空、判满、插入、删除、查找和更新等基本操作。同时,`sqlist.c`文件包含了这些函数的具体实现。在`main.c`中展示了如何调用这些函数进行实际操作。
摘要由CSDN通过智能技术生成

sqlist.h :一般装头文件,函数的声明,全局变量等

/*===============================================
*   文件名称:sqlist.h
*   创 建 者 :ydx     
*   创建日期:2023年03月09日
*   描    述:
================================================*/
#ifndef _SQLIST_H
#define _SQLIST_H

#define SIZE 100

typedef int data_t;
typedef struct {
    data_t data[SIZE];
    int index;
}sqlist_t;

//创建
sqlist_t *sqlistCreate();

//判空
int sqlistIsEmpty(sqlist_t *p);

//判满
int sqlistIsFull(sqlist_t *p);

//插入
int sqlistInsertPos(sqlist_t *p,data_t data,int pos);

//有效长度
int sqlistGetLength(sqlist_t *p);

//遍历
void sqlistShow(sqlist_t *p);

//按位置删除
int sqlistDeletePos(sqlist_t *p,int pos);

//按数据删除
int sqlistDeleteData(sqlist_t *p,data_t data);

//按位置查找
data_t sqlistSearchPos(sqlist_t *p,int pos);

//按数据查找
int sqlistSearchData(sqlist_t *p,data_t data);

//按位置修改
int sqlistUpdataPos(sqlist_t *p,data_t newdata,int pos);

//按数据修改
int sqlistUpdataData(sqlist_t *p,data_t olddata,data_t newdata);

//清空表
int sqlistClear(sqlist_t *p);

//销毁表
int sqlistDestroy(sqlist_t **p);
#endif

sqlist.c :函数功能的实现

/*===============================================
*   文件名称:sqlist.c
*   创 建 者 :ydx     
*   创建日期:2023年03月09日
*   描    述:
================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlist.h"

sqlist_t *sqlistCreate()
{
    sqlist_t *p = (sqlist_t *)malloc(sizeof(sqlist_t));
    if(NULL == p)
    {
      return NULL;
    }
    memset(p,0,sizeof(sqlist_t));
    p->index = -1;

    return p;
}
          
int sqlistIsEmpty(sqlist_t *p)
{
    if(NULL == p)
    {
        return -1;
    }
    if(p->index == -1)
    {
       return 1;
    }
    else
    {
        return 0;
    }
    //return p->sqlist == -1 ? 0 : 1;

}

int sqlistIsFull(sqlist_t *p)
{
    if(NULL == p)
    {
        return -1;
    }
    if(p->index == SIZE - 1)
    {
        return 1;
    }
    else
        return 0;
}

int sqlistGetLength(sqlist_t *p)
{
    if(NULL == p)
    {
        return -1;
    }

    return p->index + 1;
}

int sqlistInsertPos(sqlist_t *p,data_t data,int pos)
{
    if(NULL == p)
    {
        return -1;
    }
    if(sqlistIsFull(p))
    {
        return -1;
    }

    //3.判断位置pos是否合法
   int len = p->index + 1;
    if(pos < 0 || pos > len)
    {
        printf("pos error...\n");
        return -1;
    }
    //插入元素
    int i = 0;
    for(i = len-1;i >= pos;i--)
    {
        p->data[i+1] = p->data[i];
    }
    p->data[pos] = data;
    p->index++;

    return 0;

}

/*int sqlistGetLength(sqlist_t *p)
{
    if(NULL == p)
    {
        return -1;
    }

    return p->index + 1;
}
*/
void sqlistShow(sqlist_t *p)
{
    if(NULL == p)
    {
        return ;
    }
    int len = sqlistGetLength(p);
    for(int i = 0;i < len;i++)
    {
        printf("%d  ",p->data[i]);
    }
    puts("");
}

int sqlistDeletePos(sqlist_t *p,int pos)
{
    if(NULL == p)
    {
        return -1;
    }
    if(sqlistIsEmpty(p))
    {
        return -1;
    }
    int len = sqlistGetLength(p);
    //判断位置是否合法
    if(pos < 0 || pos > len -1)
    {
        return -1;
    }
    //4.删除
    for(int i = pos;i < len - 1;i++)
    {
        p->data[i] = p->data[i+1];
    }
    p->index--;

    return 0;
}

int sqlistSearchData(sqlist_t *p,data_t data)
{
    if(NULL == p)
    {
        return -1;
    }
    if(sqlistIsEmpty(p))
    {
        return -1;
    }
    for(int i = 0;i < sqlistGetLength(p); i++)
    {
        if(p->data[i] == data)
        {
            return i;
        }
    }
    return -1;
}

int sqlistDeleteData(sqlist_t *p,data_t data)
{
    if(NULL == p)
    {
        return -1;
    }
    int pos = sqlistSreachData(p,data);
    if(pos == -1)
    {
        return 1;
    }
    sqlistDeletePos(p,pos);

    return 0;
}

data_t sqlistSearchPos(sqlist_t *p,int pos)
{
    if(NULL == p)
    {
        return (data_t)-1;
    }
    if(pos < 0 || pos > sqlistGetLength(p)-1)
    {
        return (data_t)-1;
    }
    return p->data[pos];
}

int sqlistUpdataPos(sqlist_t *p,data_t newdata,int pos)
{
    if(NULL == p)
    {
        return -1;
    }
    if(sqlistIsEmpty(p))
    {
        return -1;
    }

    if(pos < 0 || pos > sqlistGetLength(p)-1)
    {
        return -1;
    }

    p->data[pos] = newdata;

    return 0;
}


int sqlistUpdataData(sqlist_t *p,data_t olddata,data_t newdata)
{
    if(NULL == p)
    {
        return -1;
    }

    if(sqlistIsEmpty(p))
    {
        return -1;
    }
    for(int i = 0;i < sqlistGetLength(p);i++)
    {
         if(p->data[i] == olddata)
        {
           p->data[i] = newdata;
           return 0;
        }
    }
           printf("no the olddata!\n");
           return -1;
}
      

int sqlistClear(sqlist_t *p)
{
    if(NULL == p)
    {
        return -1;
    }

    p->index = -1;
    return 0;
}

int sqlistDestroy(sqlist_t **p)
{
    if(NULL == *p)
    {
        return -1;
    }

    free(*p);
    *p = NULL;

    return 0;
}

main.c :函数的调用和实现

/*===============================================
*   文件名称:main.c
*   创 建 者 :ydx    
*   创建日期:2023年03月09日
*   描    述:
===============================================*/
#include <stdio.h>
#include "sqlist.h"

int main()
{
    sqlist_t *p = sqlistCreate();
    if(NULL == p)
    {
        printf("create fail...\n");
        return -1;
    }
    printf("create success...\n");
    

    //sqlistDestroy(&p);
   // p = NULL;
    int i = 0;
    for(;i < 10;i++)
    {
       sqlistInsertPos(p,i+1,0);
    }
    printf("empty : %d\n",sqlistIsEmpty(p));
    printf("full : %d\n",sqlistIsFull(p));
    printf("len : %d\n",sqlistGetLength(p));

    sqlistShow(p);

    sqlistDeletePos(p,2);
    printf("len : %d\n",sqlistGetLength(p));
    sqlistShow(p);


    int pos = sqlistSearchData(p,8);
    if(pos == -1)
    {
        printf("search failed..\n");
    }
    else{
        printf("pos: %d\n",pos);
    }

   // sqlistClear(p);
    data_t data = sqlistSearchPos(p,6);
    if(data == (data_t)-1)
    {
        printf("search failed..\n");
    }
    else
    {
        printf("data : %d\n",data);
    }

    sqlistUpdataPos(p,89,0);
    sqlistShow(p);

    sqlistUpdataData(p,3,66);
    sqlistShow(p);
    
    sqlistUpdataData(p,52,66);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值