数据结构 day3

 head.h

#ifndef __HEAD_H__
#define __HEAD_H__

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

typedef int datatype; // 把int起一个别名datatype

#define MAXSIZE 20 // 线性表长度:不变
// 顺序表结构体:只能有两个元素:数据元素,顺序表长度
// 只要多一个成员,就不是顺序表了

typedef struct
{
    // 数据元素:整数
    datatype data[MAXSIZE];
    // 顺序表长度
    int len;
} seqlist;

seqlist *Create();
int insert_rear(seqlist *list, datatype e);
void output(seqlist *list);
int IsFull(seqlist *list);
int select_by_data(seqlist *list, int e);
int update_by_data(seqlist *list, datatype e, datatype new);
int Bubble(seqlist *list);
seqlist *free_fun(seqlist *list);
#include "fun.c"
#endif

 main.c

#include "head.h"

int main(int argc, const char *argv[])
{
    seqlist *list = Create();
    int n;
    datatype e;
    printf("请输入需要输入数据的个数:\n");
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        printf("请输入第%d个数据", i + 1);
        scanf("%d", &e);
        insert_rear(list, e);
    }
    output(list);
    printf("请输入需要修改的元素:\n");
    datatype key;
    datatype new;
    scanf("%d", &key);
    printf("请输入新的元素:\n");
    scanf("%d", &new);
    update_by_data(list, key, new);
    output(list);
    Bubble(list);
    output(list);
    list=free_fun(list);
    return 0;
}

 fun.c

#include "head.h"

seqlist *Create()
{
    seqlist *list = (seqlist *)malloc(sizeof(seqlist));
    if (list == NULL)
    {
        return NULL;
    }
    list->len = 0;
    return list;
}

int insert_rear(seqlist *list, datatype e)
{
    if (IsFull(list))
    {
        printf("顺序表满了\n");
        return -1;
    }
    list->data[list->len] = e;
    list->len++;
    return 0;
}

int IsFull(seqlist *list)
{
    if (list->len == MAXSIZE)
    {
        return -1;
    }
    return 0;
}
int IsEmpty(seqlist *list)
{
    if (list->len == 0)
    {
        return -1;
    }
    return 0;
}
void output(seqlist *list)
{
    for (int i = 0; i < list->len; i++)
    {
        printf("%d\t", list->data[i]);
    }
    printf("\n");
}
int update_by_data(seqlist *list, datatype e, datatype new)
{
    int flag = select_by_data(list, e);
    // printf("%d",flag);
    if (flag == -1)
    {
        printf("没找到输入的数据\n");
        return -1;
    }
    list->data[flag] = new;
    return 0;
}
int select_by_data(seqlist *list, int e)
{
    for (int i = 0; i < list->len; i++)
    {
        if (e == list->data[i])
        {
            return i;
        }
    }
    return -1;
}
int Bubble(seqlist *list)
{
    if (IsEmpty(list))
    {
        return -1;
        printf("顺序表是空的!\n");
    }
    // 冒泡排序,从小到大
    for (int i = 0; i < list->len; i++)
    {
        for (int j = 0; j < list->len - i - 1; j++)
        {
            if (list->data[j] > list->data[j + 1])
            {
                datatype t = list->data[j];
                list->data[j] = list->data[j + 1];
                list->data[j + 1] = t;
            }
        }
    }
    return 0;
}

seqlist *free_fun(seqlist *list)
{
    if(list!=NULL){
        free(list);
        list=NULL;
    }
    return list;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值