嵌入式学习-数据结构-Day2

Day2

顺序表操作

head.c

#ifndef __HEAD_H__
#define __HEAD_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 5
typedef int datatype;//int类型重定义

//结构体重定义
typedef struct list
{
        datatype data[MAXSIZE];
        int len;
}sqlist;

//枚举
enum A
{
        FALSE=-1,
        SUCCESS
};

int null(sqlist *list);
int full(sqlist *list);
int empty(sqlist *list);
sqlist* create_list();
int insert_tail(sqlist *list,datatype element);
int output(sqlist *list);
int delete_tail(sqlist *list);
void find_index(sqlist *list,int index);
void edit_index(sqlist *list,int index,datatype index_value);
void index_interposition(sqlist *list,int index,datatype index_value);
void index_delete(sqlist *list,int index);
void element_delete(sqlist *list,int element);
void element_change(sqlist *list,datatype element,datatype new_element);
void find_element(sqlist *list,datatype element);
void eliminate_same(sqlist *list);
void sort_list(sqlist *list);
sqlist *free_space(sqlist *list);
//调用

#endif

test.c

#include "head.h"

int null(sqlist *list)
{
        return list==NULL?FALSE:SUCCESS;
}
int full(sqlist *list)
{
        return list->len==MAXSIZE?FALSE:SUCCESS;
}
int empty(sqlist *list)
{
        return list->len==0?FALSE:SUCCESS;
}

sqlist* create_list()//堆区创建
{
        sqlist *list=(sqlist *)malloc(sizeof(sqlist));
        if(null(list))
                return NULL;
        memset(list->data,0,sizeof(list->data));
        list->len=0;
        return list;
}

int insert_tail(sqlist *list,datatype element) //尾插
{
        if(null(list)||full(list))
        {
                return FALSE;
        }
        list->data[list->len]=element;
        list->len++;
}
int output(sqlist *list)//输出
{
        if(null(list)||empty(list))
                return FALSE;
        for(int i=0;i<list->len;i++)
        {
                printf("%d\t",list->data[i]);
        }
        puts("");
        return SUCCESS;
}
int delete_tail(sqlist *list)//尾删
{
        if(null(list)||empty(list))
                return FALSE;
        list->len--;
        return SUCCESS;
}

void find_index(sqlist *list,int index)//下标查找
{
        if(null(list)||empty(list)||index<0||index>=list->len)
                return;
        printf("the value of index is :%d\n",list->data[index]);
}

void edit_index(sqlist *list,int index,datatype index_value)//下标查找替换
{
        if(null(list)||empty(list)||index<0||index>=list->len)
                return;
        list->data[index]=index_value;
}

void index_interposition(sqlist *list,int index,datatype index_value)//按下标插入
{
        if(null(list)||full(list)||index<0||index>list->len)
                return;
        for(int i=list->len-1;i>=index;i--)
        {
                list->data[i+1]=list->data[i];
        }
        list->data[index]=index_value;
        list->len++;
}

void index_delete(sqlist *list,int index)//按下标删除
{
        if(null(list)||empty(list)||index<0||index>=list->len)
                return;
        for(int i=index;i<list->len;i++)
        {
                list->data[i]=list->data[i+1];
        }
        list->len--;
}

void element_delete(sqlist *list,datatype element)//按元素删除
{
        if(null(list)||empty(list))
                return;
        int flag;
        for(int i=0;i<list->len;i++)
        {
                if(list->data[i]==element)
                {
                        for(int j=i;j<list->len;j++)
                        {
                                list->data[j]=list->data[j+1];
                        }
                        list->len--;
                        flag=1;
                }
        }
        if(flag!=1)
                printf("Without this element!\n");
}

void element_change(sqlist *list,datatype element,datatype new_element)//按元素修改
{
        if(null(list)||empty(list))
                return;
        int flag;
        for(int i=0;i<list->len;i++)
        {
                if(list->data[i]==element)
                {
                        list->data[i]=new_element;
                        flag=1;
                }

        }
        if(flag!=1)
                printf("Without this element!\n");

}

void find_element(sqlist *list,datatype element)//按元素查找
{
        int arr[100];
        int *p=arr;
        int flag=0;
        if(null(list)||empty(list))
                return;
        for(int i=0;i<list->len;i++)
        {
                if(list->data[i]==element)
                {
                        *(p+flag)=i;
                        flag++;
                }
        }
        if(flag==0)
                printf("mismatch\n");
        else
        {
                for(int i=0;i<flag;i++)
                {
                        printf("the id is %d\n",*(p+i));
                }
        }
}

void eliminate_same(sqlist *list)//按元素去重
{
        if(null(list)||empty(list)||list->len<=1)
                return;
        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])
                        {
                                index_delete(list,j);
                                j--;
                        }
                }
        }

}


void sort_list(sqlist *list)//简单选择排序
{
        if(null(list)||empty(list)||list->len<=1)
                return;
        for(int i=0;i<list->len-1;i++)
        {
                int max=list->data[i];
                int maxi=i;
                for(int j=i+1;j<list->len;j++)
                {
                        if(max<list->data[j])
                        {
                                max=list->data[j];
                                maxi=j;
                        }
                }
                if(maxi==i)
                        continue;
                int t=list->data[i];
                list->data[i]=list->data[maxi];
                list->data[maxi]=t;
        }
}


sqlist *free_space(sqlist *list) //顺序表释放
{
        if(null(list))
                return NULL;
        free(list);
        list=NULL;
        return list;
}

main.c

#include "head.h"
int main(int argc, const char *argv[])
{
        sqlist *list=create_list();
        int n;
        printf("enter num:");
        scanf("%d",&n);
        datatype element;
        for(int i=0;i<n;i++)
        {
                printf("enter %d element:",i+1);
                scanf("%d",&element);
                int flag=insert_tail(list,element);
                if(flag==FALSE)
                {
                        puts("NULL or full");
                        break;
                }
        }
        output(list);

        delete_tail(list);
        output(list);
        int index;
        printf("enter the index:");
        scanf("%d",&index);
        find_index(list,index);
    
        datatype index_value;
        printf("enter the change index:");
        scanf("%d",&index);
        printf("enter index_value:");
        scanf("%d",&index_value);
        edit_index(list,index,index_value);
        output(list);
    
        printf("enter the index_interposition:");
        scanf("%d",&index);
        printf("enter the index_value:");
        scanf("%d",&index_value);
        index_interposition(list,index,index_value);
        output(list);
    
        printf("enter the index_delete:");
        scanf("%d",&index);
        index_delete(list,index);
        output(list);



        datatype element_del;
        printf("enter the element:");
        scanf("%d",&element_del);
        element_delete(list,element_del);
        output(list);


        int new_element;
        printf("enter the element:");
        scanf("%d",&element);
        printf("enter the new_element");
        scanf("%d",&new_element);
        element_change(list,element,new_element);
        output(list);




        printf("please enter the element you want find:");
        scanf("%d",&element);
        find_element(list,element);


        eliminate_same(list);
        output(list);



        sort_list(list);
        output(list);


        free_space(list);

        return 0;
}

实现过程

在这里插入图片描述
在这里插入图片描述

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值