数据结构第一天作业

头文件

#ifndef __1_H_
#define __1_H_

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

#define N 20

typedef int dataint;

typedef struct node
{
    dataint data[N];
    int pos;
}Seq;

void show();
Seq * found();
void insert(Seq *list);
void insertx(Seq *list);

void clean(Seq *list);
void cleanxb(Seq *list);

void chage(Seq *list);
void chagexb(Seq *list);

void find(Seq *list);
void findxb(Seq *list);
void find1(Seq *list);

void show1(Seq *list);
void dedup(Seq *list);

#endif

主函数

#include "1.h"

int main(int argc, char const *argv[])
{
    Seq *list = found();
    list->pos = 0;
    int a = 0;//功能选择
    while(1)
    {
        show();
        printf("请输入选择:");
        scanf("%d", &a);
        switch (a)
        {
        case 1:
            //增加数据
            insert(list);//尾部插入
            //insertx(list);//下标插入
            break;
        case 2:
            //删除数据
            //clean(list);//按数据删除数据
            cleanxb(list);//按下标删除数据
            break;
        case 3:
            //修改数据
            //chage(list);//按数据修改数据
            chagexb(list);//按下标修改数据
            break;
        case 4:
            //查找数据
            //find(list);//按数据查找
            //findxb(list);//按下标查找
            find1(list);//查找下标
            break;
        case 5:
            //遍历
            show1(list);//遍历所有顺序表
            //dedup(list);//删除重复顺序表
            break;
        case 0:
            free(list);//释放堆空间
            return 0;
        default:
            printf("输入有误,请重新输入!!!\n");
            break;
        }
    }
    return 0;
}

功能函数

#include "1.h"

//创建顺序表
Seq * found()
{
    Seq *list = malloc(sizeof(Seq));
    memset(list, 0, sizeof(Seq));
    return list;
}

//显示
void show()
{
    printf("*******1、添加数据*******\n");
    printf("*******2、删除数据*******\n");
    printf("*******3、修改数据*******\n");
    printf("*******4、查找数据*******\n");
    printf("*******5、打印数据*******\n");
    printf("*******0、退出    *******\n");
}

//尾部插入数据
void insert(Seq *list)
{
    if(N == list->pos)
    {
        printf("内存已用完!!!\n");
        return ;
    }
    printf("请输入数据:");
    scanf("%d",&list->data[list->pos]);
    list->pos++;
    printf("添加成功。\n");
}

//下标插入
void insertx(Seq *list)
{
    if(N == list->pos)
    {
        printf("内存已用完!!!\n");
        return;
    }
    int xb = 0, data = 0;
    printf("下标必须小于%d大于等于0。\n", list->pos+1);
    printf("请输入需要插入的下标:");
    scanf("%d", &xb);
    if(xb <= list->pos && xb >= 0)
    {
        printf("请输入插入的数据:");
        scanf("%d", &data);
        for(int i = list->pos; i > xb; i--)
        {
            list->data[i] = list->data[i-1];
        }
        list->data[xb] = data;
        list->pos++;
        printf("插入成功。\n");
    }
    else
    {
        printf("下标必须小于%d大于等于0,插入失败。\n", list->pos+1);
    }
}

//按数据删除数据
void clean(Seq *list)
{
    if(!list->pos)
    {
        printf("目前没有数据!!!\n");
        return ;
    }   
    int data = 0;
    printf("请输入需要删除的数据:");
    scanf("%d", &data);
    int i = 0, j = 0;
    for(; i < list->pos; i++)
    {
        if(data == list->data[i])
        {
            for(j = i; j < list->pos; j++)
            {
                list->data[j] = list->data[j+1];
            }
            list->pos--;
            return ;
        }
        if(i == list->pos-1)
            printf("没有该数据,请重新输入!!!\n");
    }
}

//下标删除
void cleanxb(Seq *list)
{
    if(!list->pos)
    {
        printf("目前没有数据!!!\n");
        return;
    }
    int xb = 0;
    printf("输入的下标应该大于等于0小于%d。\n", list->pos);
    printf("请输入需要删除的下标:");
    scanf("%d", &xb);
    if(xb >= 0 && xb < list->pos)
    {
        for(int i = xb; i < list->pos-1; i++)
        {
            list->data[i] = list->data[i+1];
        }
        list->pos--;
    }
    else
    {
        printf("输入的下标应该大于等于0小于%d,删除失败。\n", list->pos);
    }
}

//按数据修改数据
void chage(Seq *list)
{
    if(!list->pos)
    {
        printf("目前没有数据!!!\n");
        return ;
    }   
    int data = 0, flag = 0;
    printf("请输入需要修改的数据:");
    scanf("%d", &data);
    for(int i = 0; i < list->pos; i++)
    {
        if(data == list->data[i])
        {
            flag = 1;
            printf("请输入修改后的数据:");
            scanf("%d", &list->data[i]);
            printf("修改完成。\n");
        }
        if(0 == flag)
        {
            printf("查无数据!!!\n");
        }
    }
}

//下标修改
void chagexb(Seq *list)
{
    if(!list->pos)
    {
        printf("目前没有数据!!!\n");
        return;
    }
    int xb = 0;
    printf("输入的下标应该大于等于0小于%d。\n", list->pos);
    printf("请输入需要修改的下标:");
    scanf("%d", &xb);
    if(xb >= 0 && xb < list->pos)
    {
        printf("请输入新的数据:");
        scanf("%d", &list->data[xb]);
        printf("修改成功。\n");
    }
    else
    {
        printf("输入的下标应该大于等于0小于%d,修改失败。\n", list->pos);
    }
}

//查找数据
void find(Seq *list)
{
    if(!list->pos)
    {
        printf("目前没有数据!!!\n");
        return ;
    }   
    int s = 0, flag = 0;
    printf("请输入需要查找的数据:");
    scanf("%d", &s);
    for(int i = 0; i < list->pos; i++)
    {
        if(s == list->data[i])
        {
            flag = 1;
            printf("\t数据\n\t%d\n", list->data[i]);
        }
    }
    if(0 == flag)
    {
        printf("查无数据!!!\n");
    }
}

//查找数据下标
void find1(Seq *list)
{
    if(!list->pos)
    {
        printf("目前没有数据!!!\n");
        return ;
    }   
    int s = 0, flag = 0, arr[N] = {0}, m = 0;//m是存入下标数组的下标
    printf("请输入需要查找的数据:");
    scanf("%d", &s);
    for(int i = 0; i < list->pos; i++)
    {
        if(s == list->data[i])
        {
            flag = 1;
            arr[m] = i;
            m++;
        }
    }
    if(0 == flag)
    {
        printf("查无数据!!!\n");
        return;
    } 
    printf("数据中为%d的下标有:", s);
    for(int j = 0; j < m; j++)
        printf("%d ", arr[j]);
    putchar(10);
}

//下标查找
void findxb(Seq *list)
{
    if(!list->pos)
    {
        printf("目前没有数据!!!\n");
        return;
    }
    int xb = 0;
    printf("请输入需要查找的下标:");
    scanf("%d", &xb);
    if(xb >= 0 && xb < list->pos)
    {
        printf("\t数据\n\t%d\n", list->data[xb]);
    }
    else
    {
        printf("输入的下标应该大于等于0小于%d,查无此数。\n", list->pos);
    }
}

//遍历数据
void show1(Seq *list)
{
    if(!list->pos)
    {
        printf("目前没有数据!!!\n");
        return ;
    }   
    printf("\t数据\n");
    for(int i = 0; i < list->pos; i++)
    {
        printf("\t%d\n",list->data[i]);
    }
}

//顺序表去重
void dedup(Seq *list)
{
    if(!list->pos)
    {
        printf("目前没有数据!!!\n");
        return ;
    }   
    for(int i = 0; i < list->pos; i++)
    {
        for(int j = i+1; j < list->pos; j++)
        {
            if(list->data[i] == list->data[j])
            {
                for(int k = j; k < list->pos-1; k++)
                {
                    list->data[k] = list->data[k+1];
                }
                j--;
                list->pos--;
            }
        }
    }
    for(int i = 0; i < list->pos; i++)
    {
        printf("\t%d\n",list->data[i]);
    }
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值