2024-1-23-数据结构作业

作业:

#main函数

#include"head.h"
int main(int argc,char *argv[])
{
    sqlist*list= create();

    //循环调用尾插函数
    int n;
    datatype element;
    printf("Please enter n\n");
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        printf("please enter %d insert element :",i+1);
        scanf("%d",&element);
        int flag=insert_rear(element,list);
        if(flag==FALSE)
        {
            printf("NULL or  FULL\n");
            break;
        }
    }

    //循环遍历
    output(list);



 //按任意元素修改
     int key;
    printf("please enter revise key:\n");
    scanf("%d",&key);
    int flag_revise_key=revise_key(list,key);
    if(SUCCESS==flag_revise_key)
    {
        printf("修改成功\n");
        output(list);
    }
    else  {printf("删除失败\n");output(list);}

    // 按任意元素删除
    int key;
    printf("please enter delete key:\n");
    scanf("%d", &key);
    int flag_delete_key=delete_key(list,key);
    if(SUCCESS==flag_delete_key)
    {
        printf("删除成功\n");
        output(list);
    }
    else {printf("删除失败\n");output(list);}

    //排序
    int flag_sort=sort_list(list);
    if(SUCCESS==flag_sort)
    {
        printf("排序成功\n");
        output(list);
    }
    else printf("排序失败\n");


    //释放空间
    int flag_free=free_list(list);
    if(SUCCESS==flag_free)
    {
        printf("释放成功\n");

    }
    else printf("释放失败\n");




    
    return 0;
}

#函数定义test.c

#include"head.h"
//创建函数
sqlist* create()
{
    sqlist *list=(sqlist*)malloc(sizeof(sqlist));
    if(NULL==list)
    return NULL;
    //成功返回地址

    //对数据元素清0
    memset(list->data,0,sizeof(list->data));
    //顺序标长度清0
    list->len=0;

    return list;
}
//判list满
int full(sqlist *list)
{
    return list->len==MAXSIZE?FALSE:SUCCESS;
}
//判空
int empty(sqlist *list)
{
     return list->len==0?FALSE:SUCCESS;
}
//尾插
int insert_rear(datatype element,sqlist* list)
{
    //判断顺序表是否h创建成功
    //判断顺序表是否为满
    if(NULL==list || full(list) )
            return FALSE;
    list->data[list->len++]=element;
    return SUCCESS;
}
//遍历顺序表
int output(sqlist *list)
{
      //判断顺序表是否创建成功
    //判断顺序表是否为空
    if(NULL==list || empty(list))
    return FALSE;
    for (int  i = 0; i < list->len; i++)
    {
        printf("%-5d",list->data[i]);
    }
    printf("\n");
}
int delete_rear(sqlist* list)
{
    //判断顺序表是否创建成功
    //判断顺序表是否为空
    if(NULL==list || empty(list))
    return FALSE;
    list->len--;
    return SUCCESS;
}

 void search_index(sqlist* list,int index)
 {
    if(NULL==list || empty(list ) || index<0 || index>=list->len)
    {
        printf("ERROR\n");
        return;
    }
    printf("The  index  element is  %d \n",list->data[index]);
 }
 //修改
 int revise_index(sqlist* list,int index)
 {
    if(NULL==list || empty(list ) || index<0 || index>=list->len)
    return FALSE;
    int revise_num;
    search_index(list,index);
    printf("请输入修改后的值\n");
    scanf("%d",&revise_num);
    list->data[index]=revise_num;
    return SUCCESS;
    
 }
 //随机插入
int insert_index(sqlist * list,int index,int element)
{
    if(NULL==list || full(list)  ||  index<0 || index> list->len)
    return FALSE;
    for(int i=list->len-1;i>=index;i--)
    {
        list->data[i+1]=list->data[i];
    }
    list->data[index]=element;
    list->len++; 
    return SUCCESS;
}
    //删除任意下标值
    int delete_index(sqlist* list,int index)
    {
        if(NULL==list || empty(list) || index<0 || index>=list->len)
            return FALSE;
        for(int i=index+1;i<list->len;i++)
        {
            list->data[i-1] = list->data[i];
        }
        list->len--;

        return SUCCESS;
    }
//查找任意元素,并返回下标
int search_key(sqlist* list,int key)
{
    if(NULL==list || empty(list))
    return -1;
    int index=-1;
    for(int i=0;i<list->len;i++)
    {
        if(list->data[i]==key)
        {
            index=i; 
            break;
        }
    }
    return index;

}
int revise_key(sqlist* list,int key)
{
    if(NULL==list || empty(list))
            return FALSE;
        int index_first=search_key(list,key);
        revise_index(list,index_first);
        
    return SUCCESS;

}
int delete_key(sqlist* list,int key)
{
    
    if(NULL==list || empty(list))
            return FALSE; 
        int index_first=search_key(list,key);
        delete_index(list,index_first);
    return SUCCESS;
}

int remove_repeating(sqlist *list)
{
    if(NULL==list || empty(list))
    return FALSE;

    for(int i=0;i<list->len-1;i++)
    {
        for(int j=i+1;j<list->len;j++)
        {
            if(list->data[i]==list->data[j])
            {
                delete_index(list,j);
                j--;
            }
        }
    }
    return SUCCESS;
}

int sort_list(sqlist *list)
{
    if(NULL==list || empty(list))
    return FALSE;
    for (int i = 0; i < list->len - 1; i++)
    {
        for (int j = i; j < list->len; j++)
        {
            if (list->data[i] > list->data[j])
            {
                list->data[i] += list->data[j];
                list->data[j] = list->data[i] - list->data[j];
                list->data[i] -= list->data[j];
            }
        }
    }

    return SUCCESS;
}

int free_list(sqlist *list)
{
    if(NULL==list || empty(list))
    return FALSE;
    free(list);
    list = NULL;    

    return SUCCESS;
}



#头文件head.h

#ifndef  _HEAD_H__
#define _HEAD_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h> 
enum num
{
    FALSE=-1,
    SUCCESS
};
#define MAXSIZE 7

typedef int datatype;
typedef struct SQLIST
{
    datatype data[MAXSIZE];
    int len;
}sqlist;
//函数声明
sqlist* create();
int full(sqlist *list);
int insert_rear(datatype element,sqlist* list);
int output(sqlist *list);
int delete_rear(sqlist* list);
void search_index(sqlist* list,int index);
int revise_index(sqlist* list,int index);
 int insert_index(sqlist * list,int index,int element);
int delete_index(sqlist* list,int index);
int search_key(sqlist* list,int key);
int revise_key(sqlist* list,int key);
int delete_key(sqlist* list,int key);
int remove_repeating(sqlist *list);
int free_list(sqlist *list);
int remove_repeating(sqlist *list);
#endif

1.顺序表按任意元素修改

源代码:

nt revise_key(sqlist* list,int key)
{
    if(NULL==list || empty(list))
            return FALSE;
        int index_first=search_key(list,key);
        revise_index(list,index_first);
        
    return SUCCESS;

}

效果图:

2.顺序表按任意元素修改

源代码:

int delete_key(sqlist* list,int key)
{
    
    if(NULL==list || empty(list))
            return FALSE; 
        int index_first=search_key(list,key);
        delete_index(list,index_first);
    return SUCCESS;
}

效果图:

3.顺序表排序

源代码:

int sort_list(sqlist *list)
{
    if(NULL==list || empty(list))
    return FALSE;
    for (int i = 0; i < list->len - 1; i++)
    {
        for (int j = i; j < list->len; j++)
        {
            if (list->data[i] > list->data[j])
            {
                list->data[i] += list->data[j];
                list->data[j] = list->data[i] - list->data[j];
                list->data[i] -= list->data[j];
            }
        }
    }

    return SUCCESS;
}

效果图:

4.顺序表释放空间

源代码:

int free_list(sqlist *list)
{
    if(NULL==list || empty(list))
    return FALSE;
    free(list);
    list = NULL;    

    return SUCCESS;
}

效果图:

5.思维导图

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值