数据结构:顺序表

博客提及了sxb.h、sxb.c、main.c等代码文件以及makefile,与信息技术相关,可能涉及代码的组织和编译等内容。

sxb.h

/*===============================================
*   文件名称:sxb.h
*   创 建 者: crx    
*   创建日期:2023年08月22日
*   描    述:
================================================*/
#ifndef _SXB_H
#define _SXB_H

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

typedef struct Sequence_list{
    int *arr;
    int len;
    int tail;
}Seq,*Pseq;

void seqlist_init(Pseq *p,int len);
Pseq seqlist_create(int len);
int empty_list(Pseq p);
int full_list(Pseq p);
int length(Pseq p);
void show(Pseq p);
int insert_data(Pseq p,int pos,int data);

int delete_pos(Pseq p,int pos);
int delete_data(Pseq p,int data);

int change_data(Pseq p,int old_data,int new_data);
int change_pos(Pseq p,int pos,int new_data);

int search_data(Pseq p,int data);
int search_pos(Pseq p,int pos);

#endif

 sxb.c

/*===============================================
 *   文件名称:sxb.c
 *   创 建 者:crx    
 *   创建日期:2023年08月22日
 *   描    述:
 ================================================*/
#include "sxb.h"

void seqlist_init(Pseq *p,int len)
{
    *p = malloc(sizeof(Seq));
    if(NULL == p)
    {
        perror("malloc");
        return;
    }
    (*p)->arr = malloc(sizeof(int)*len);
    if(NULL == (*p)->arr)
    {
        perror("malloc");
        free(p);
        return;
    }
    (*p)->len = len;
    (*p)->tail = 0;
    return;
}

Pseq seqlist_create(int len)
{
    Pseq p = malloc(sizeof(Pseq));
    if(NULL == p)
    {
        perror("malloc");
        return NULL;
    }
    p->arr = malloc(sizeof(int)*len);
    if(NULL == p->arr)
    {
        perror("malloc");
        free(p);
        return NULL;
    }
    p->len = len;
    p->tail = 0;
    return p;
}

int empty_list(Pseq p)
{
    return p->tail == 0;
}

int full_list(Pseq p)
{
    return p->tail == p->len;
}

int length(Pseq p)
{
    return p->tail;
}

void show(Pseq p)
{
    if(NULL == p)
    {
        return;
    }
    for(int i = 0;i < p->tail;i++)
    {
        printf("%d ",p->arr[i]);
    }
    puts("");
}

int insert_data(Pseq p,int pos,int data)
{
    if(NULL == p)
    {
        return -1;
    }
    if(pos < 0 || pos > p->tail || full_list(p))
    {
        return -2;
    }
    for(int i = p->tail;i > pos;i--)
    {
        p->arr[i] = p->arr[i-1];
    }
    p->arr[pos] = data;
    p->tail++;
    return 1;
}

int delete_pos(Pseq p,int pos)
{
    if(NULL == p)
    {
        return -1;
    }
    if(pos >= p->tail || pos < 0 || empty_list(p))
    {
        return -2;
    }
    int data = p->arr[pos];
    for(int i = pos;i < p->tail-1;i++)
    {
        p->arr[i] = p->arr[i+1];
    }
    p->tail--;
    return data;
}

int delete_data(Pseq p,int data)
{
    if(NULL == p)
    {
        return -1;
    }
    for(int i = 0;i < p->tail;i++)
    {
        for(int i = 0;i < p->tail;i++)
        {
            if(data == p->arr[i])
            {
                for(int j = i;j < p->tail-1;j++)
                {
                    p->arr[j] = p->arr[j+1];

                }
                p->tail--;
            }
        }
    }
    return 1;
}

int change_data(Pseq p,int old_data,int new_data)
{
    if(NULL == p)
    {
        return -1;
    }
    for(int i = 0;i < p->tail;i++)
    {
        if(p->arr[i] == old_data)
        {
            p->arr[i] = new_data;
        }
    }
    return 1;
}

int change_pos(Pseq p,int pos,int new_data)
{
    if(NULL == p)
    {
        return -1;
    }
    p->arr[pos] = new_data;
    return 1;
}

int search_data(Pseq p,int data)
{
    if(NULL == p)
    {
        return -1;
    }
    int pos = 0;
    for(int i = 0;i < p->tail;i++)
    {
        if(p->arr[i] == data)
        {
            pos = i;
            break;
        }
    }
    return pos;
}

int search_pos(Pseq p,int pos)
{
    if(NULL == p)
    {
        return -1;
    }
    return p->arr[pos];
}

main.c

/*===============================================
 *   文件名称:main.c
 *   创 建 者:crx     
 *   创建日期:2023年08月22日
 *   描    述:
 ================================================*/
#include "sxb.h"

int main(int argc, char *argv[])
{ 
    int data,len,pos,old_data,new_data = 0;
    printf("*****************seqlist_init*********************\n");
    printf("请输入要开辟的顺序表大小:\n");
    len = 0;
    scanf("%d",&len);
    Pseq p;
    //seqlist_init(&p,len);
    p = seqlist_create(len);


    printf("********************empty_list********************\n");
    data = empty_list(p);
    printf("空表为1:\n");
    printf("%d\n",data);


    printf("*******************insert_data********************\n");
    printf("请输入9个数据:\n");
    for(int i = 0;i < 9;i++)
    {
        scanf("%d",&data);
        insert_data(p,i,data);
    }

    printf("***********************show***********************\n");
    show(p);

    printf("***********************insert*********************\n");
    printf("请输入要插入的下标位置及数据\n");
    scanf("%d %d",&pos,&data);
    insert_data(p,pos,data);
    printf("插入后如下:\n");
    show(p);

    printf("***********************length*********************\n");
    len = length(p);
    printf("表的长度为:%d\n",len);

    printf("**********************full_list*******************\n");
    data = full_list(p);
    printf("表满为1:\n");
    printf("%d\n",data);

    printf("**********************change_pos******************\n");
    printf("请输入要改变的下标位置与改变后的值:\n");
    scanf("%d %d",&pos,&data);
    change_pos(p,pos,data);
    printf("改变后如下:\n");
    show(p);

    printf("**********************change_data*****************\n");
    printf("请输入要改变的数据与改变后的值:\n");
    scanf("%d %d",&old_data,&new_data);
    change_data(p,old_data,new_data);
    printf("改变后如下:\n");
    show(p);

    printf("***********************search_pos*****************\n");
    printf("请输入要查找的下标位置:\n");
    scanf("%d",&pos);
    data = search_pos(p,pos);
    printf("位置对应的数据为:%d\n",data);

    printf("***********************search_data****************\n");
    printf("请输入要查找的数据:\n");
    scanf("%d",&data);
    pos = search_data(p,data);
    printf("数据第一次出现对应的下标位置为:%d\n",pos);

    printf("***********************delete_pos*****************\n");
    printf("请输入要删除的数据位置下标:\n");
    scanf("%d",&pos);
    data = delete_pos(p,pos);
    printf("数据%d已删除\n",data);
    show(p);

    printf("*********************delete_data******************\n");
    printf("请输入要删除的数据:\n");
    scanf("%d",&data);
    delete_data(p,data);
    printf("删除后如下:\n");
    show(p);

    printf("**********************full_list*******************\n");
    data = full_list(p);
    printf("表满为1:\n");
    printf("%d\n",data);

    return 0;
}

makefile

a.out:sxb.o main.o
	gcc sxb.o main.o -o a.out
sxb.o:sxb.c
	gcc -c sxb.c -o sxb.o
main.o:main.c
	gcc -c main.c -o main.o
clean:
	rm a.out sxb.o main.o

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值