DAY 13 HOMEWORK

该代码实现了一个顺序表结构,包括创建、尾部插入、删除、遍历、按下标查找、修改、插入、删除元素等功能,还提供了冒泡排序和释放内存的空间操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

head.h文件

#ifndef __HEAD.H__
#define __HEAD.H__
 
 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 10
typedef int datatype;
typedef struct
{
    datatype data[MAXSIZE];
    int len;
}seqlist;
 
seqlist *create();
void menu();
 
 
int empty_seqlist(seqlist *list);
int full_seqlist(seqlist *list);
int insert_rear(int e,seqlist *list);
int output(seqlist *list);
int delete_rear(seqlist *list);
 
int find_sub(seqlist *list,int sub);
int  repl_sub(seqlist *list,int sub,int e);
int insert_sub(seqlist *list,int sub,int e);
int delete_sub(seqlist *list,int sub);
 
int eliment_insert(seqlist *list,int key,int e);
int eliment_find(seqlist *list,int key);
int eliment_ repl(seqlist *list,int key,int e);
int eliment_delete(seqlist *list,int key);
 
 
//冒泡排序
int bump_sort(seqlist *list);
seqlist *free_sapce(seqlist *list);
 
#endif

#include"head.h"
int main(int argc, const char *argv[])
{

    seqlist *list=create();
    menu();
    int member;
    while(1)
    {
        printf("请输入您的选择:\n");
        scanf("%d",&member);
        switch(member)
        {
        case 1:
            {
                int n;
                datatype e;
                printf("请输入尾部插入的个数:\n");
                scanf("%d",&n);
                for(int i=0;i<n;i++)
                {
                    printf("请输入要插入的数据元素:");
                    scanf("%d",&e);
                    insert_rear(e,list);
                }
            
            }
            break;
        case 2:
            {
                delete_rear(list);
            }
            break;
        case 3:
               {
                   output(list);
               }
               break;
        case 4:
               {
                       int sub;
                    printf("请输入您要查找的下标:");
                    scanf("%d",&sub);
                   find_sub(list,sub);
               }
               break;
        case 5:
               {
                       int sub;
                    int e;
                    printf("请输入您要修改的下标:");
                    scanf("%d",&sub);
                    printf("请输入您要修改的数值:");
                    scanf("%d",&e);
 
                    repl_sub(list,sub,e);
                    
               }break;
        case 6:
               {
                       
                       int sub;
                    int e;
                    printf("请输入您要插入的下标:");
                    scanf("%d",&sub);
                    printf("请输入您要插入的数值:");
                    scanf("%d",&e);
 
                   insert_sub(list,sub,e);
               }break;
        case 7:
               {
                       
                       int sub;
                    printf("请输入您要删除元素的下标:");
                    scanf("%d",&sub);
 
                    delete_sub(list,sub);
               }break;
 
 
        case 8:
               {
                       int key;
                    int e;
                       printf("请输入你要查找的元素和插入的元素:");
                    scanf("%d %d",&key,&e);
                    eliment_insert(list,key,e);
               }break;
 
        case 9:
              {
                      int key;
                    printf("请输入您要查找的元素:");
                    scanf("%d",&key);
                    int flag=eliment_find(list,key);
                    printf("您所查找的元素:%d下标是:%d\n",key,flag);
 
              }break;
        case 10:
              {
                      int key;
                    int e;
                    printf("您好,请输入您要修改的元素和要修改的结果");
                    scanf("%d %d",&key,&e);
                    eliment_ repl(list,key,e);
              }break;
        case 11:
              {
                      int key;
                    printf("请输入要删掉的元素\n");
                    scanf("%d",&key);
                    eliment_delete(list,key);
              }break;
 
        case 12:
              {
                  bump_sort(list);
              }break;
        
        case 13:
              {
                  list=free_sapce(list);
              }break;
        default:printf("输入错误,请重新输入您的选择:\n");break;
        case 0:exit(0);
        }
    }
 
    return 0;
}


    test.c
#include"head.h"
void menu()
{

    puts("\t1,表尾部插入");
    puts("\t2,表尾部删除");
    puts("\t3,顺序表遍历");
 
    puts("\t4,按照下标查找元素");
    puts("\t5,按照下标修改元素");
    puts("\t6,按照下标插入元素");
    puts("\t7,按照下标删除元素");
 
    puts("\t8,顺序表按照元素插入");
    puts("\t9,顺序表按照元素查找");
    puts("\t10,顺序表按照元素修改");
    puts("\t11,顺序表按照元素删除");
    
    puts("\t12,排序");
    puts("\t13,释放空间");
 
    puts("\t0,退出整个程序");

}
 
seqlist *create()
{
    seqlist *list=(seqlist *)malloc(sizeof(seqlist));
    if(list==NULL)
        return NULL;
        list->len=0;
    return list;
}
 
int insert_rear(int e,seqlist *list)
{
    
    if(list==NULL||list->len==MAXSIZE)
    {
        return -1;
    }
    
    list->data[list->len]=e;
    list->len++;
    return 0;
}
 
int output(seqlist *list)
{
    if(list==NULL||list->len==0)
    {
        return -1;
    }
    for(int i=0;i<list->len;i++)
    {
        printf("%d\t",list->data[i]);
    }
    puts("");
}
 
int delete_rear(seqlist *list)
{
    if(list==NULL||list->len==0)
    {
        return -1;
    }
    list->len--;
    return 0;
}
 
int find_sub(seqlist *list,int sub)
{
    if(list==NULL||list->len==0||sub<0||sub>=list->len)
    {
        return -1;
    }
    printf("%d\n",list->data[sub]);
    return 0;
}
 
int  repl_sub(seqlist *list,int sub,int e)
{
        if(list==NULL||list->len==0||sub<0||sub>=list->len)
    {
        return -1;
    }
    list->data[sub]=e;
    
    return 0;
}
 
int insert_sub(seqlist *list,int sub,int e)
{
    if(list==NULL||list->len==MAXSIZE||sub<0||sub>list->len)
    {
        return -1;
        printf("不能插入下标\n");
    }
    printf("可以插入元素\n");
    for(int i=list->len-1; i>=sub; i--)
    {
        list->data[i+1]=list->data[i];    
    }
    list->data[sub]=e;
    list->len++;
    return 0;
}
int delete_sub(seqlist *list,int sub)
{
    if(list==NULL||empty_seqlist(list)||sub<0||sub>=list->len)
    {
        return -1;
        printf("删除失败\n");
    }
    for(int i=sub+1; i<list->len; i++)
    {
        list->data[i-1]=list->data[i];    
    }
    list->len--;
    printf("删除成功\n");
    return 0;
}

int empty_seqlist(seqlist *list)
{
    return list->len==0?-1:0;
}
 
int full_seqlist(seqlist *list)
{
    return list->len==(MAXSIZE?-1:0);
}
int eliment_insert(seqlist *list,int key,int e)
{
    if(list==NULL||full_seqlist(list))
    {
        return -1;
        printf("插入元素失败\n");
    }
    int sub;
    for(int i=0;i<list->len;i++)
    {
        if(list->data[i]==key)
        {
            sub=i;
        }
    }
    for(int i=list->len-1; i>sub; i--)
    {
        list->data[i+1]=list->data[i];    
    }
    list->data[sub+1]=e;
    list->len++;
    printf("插入元素成功\n");
    
}
 
int eliment_find(seqlist *list,int key)
{
    
    if(list==NULL||empty_seqlist(list))
    {
        return -1;
        printf("不能查找元素\n");
    }
    
    int sub;
    for(int i=0;i<list->len;i++)
    {
        if(list->data[i]==key)
        {
            sub=i;
            return sub;
        }
    }
    printf("%d元素不存在\n",key);
    return -1;
 
}
int eliment_ repl(seqlist *list,int key,int e)
{
    int sub=eliment_find(list,key);
    if(sub==-1)
    {
        printf("不能修改元素\n");
        return -1;
    }
    //可以修改元素
    list->data[sub]=e;
    printf("修改元素成功\n");
    return 0;
}
 
int eliment_delete(seqlist *list,int key)
{
    int sub=eliment_find(list,key);
    if(sub==-1)
    {
        printf("不能执行删除\n");
        return -1;
    }
    //可以删除
    for(int i=sub+1; i<list->len; i++)
    {
        list->data[i-1]=list->data[i];    
    }
    list->len--;
    printf("删除成功\n");
    return 0;
 
}
 
int bump_sort(seqlist *list)
{
 
    int temp,i,j;
    for(int i=0;i<list->len-1;i++)
    {
        //内层循环控制比较次数
        for(int j=0;j<list->len-1-i;j++)
        {
            if(list->data[j]>list->data[j+1])
            {
                temp=list->data[j];
                list->data[j]=list->data[j+1];
                list->data[j+1]=temp;
            }
        }
    }
    return 0;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值