数据结构DAY3 顺序表按元素修改 删除 插入 排序(冒泡,简单选择) 合并

"head.h"

#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int datatype;
#define MAXSIZE 20
typedef struct
{
datatype data[MAXSIZE];
int len;
}seqlist;

seqlist *create_seqlist();
int input_seqlist();
int out_seqlist();
int xiugai_data();
int delete_data();
int insert_data();
int bubble_seqlist();
int simple_seqlist();
void combine();
seqlist *free_seqlist();
#endif
 

"test.c"

#include "head.h"
seqlist *create_seqlist()
{
    seqlist *list=(seqlist *)malloc(sizeof(seqlist));
    if(list==NULL)
        return NULL;
    list->len=0;
    return list;

}

int full_seqlist(seqlist *list)
{
    return list->len==MAXSIZE?-1:0;
}

int empty_seqlist(seqlist *list)
{
    return list->len==0?-1:0;
}

int input_seqlist(seqlist *list,datatype e)
{
    if(NULL==list || full_seqlist(list))
        return -1;
    list->data[list->len]=e;
    list->len++;
    return 0;
}

int out_seqlist(seqlist *list)
{
    if(NULL==list || empty_seqlist(list))
        return -1;
    for(int i=0;i<list->len;i++)
    {
        printf("%d\t",list->data[i]);
    }
    puts("");
    return 0;
}

int search_data_empty(seqlist *list,datatype key)
{
    if(NULL==list || empty_seqlist(list))
    {
        printf("请检查程序!");
        return -1;
    }
    for(int i=0;i<list->len;i++)
    {
        if(key == list->data[i])
            return i;
    }
}

int search_data_full(seqlist *list,datatype key)
{
    if(NULL==list || full_seqlist(list))
    {
        printf("请检查程序!");
        return -1;
    }
    for(int i=0;i<list->len;i++)
    {
        if(key == list->data[i])
            return i;
    }
}


void  xiugai_xiabiao(seqlist *list,int i,datatype e)
{
    list->data[i]=e;
}


int xiugai_data(seqlist *list,datatype key,datatype e)
{
    int i=search_data_empty(list,key);

    xiugai_xiabiao(list,i,e);
    return 0;
}

int delete_data(seqlist *list,datatype key)
{
    int m=search_data_empty(list,key);
    for(int i=m;i<list->len;i++)
    {
        list->data[i]=list->data[i+1];
    }
    list->len--;
    return 0;
}

int insert_data(seqlist *list,datatype key,datatype e)
{
    int m=search_data_full(list,key);
    for(int i=list->len-1;i>=m;i--)
    {
        list->data[i+1]=list->data[i];
    }
    list->data[m]=e;
    list->len++;
}

int bubble_seqlist(seqlist *list)
{
    if(NULL==list || empty_seqlist(list))
    {
        printf("请检查程序!");
        return -1;
    }
    datatype temp;
    for(int i=1;i<list->len;i++)
    {
        int count=0;
        for(int j=0;j<list->len-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;
                count++;
            }
        }
        if (count==0)
        break;
    }
    return 0;

}

int simple_seqlist(seqlist *list)
{
    if(NULL==list || empty_seqlist(list))
    {
        printf("请检查程序!");
        return -1;
    }
    int Min=0;
    datatype temp;
    for(int i=0;i<list->len-1;i++)
    {
        Min=i;
        for(int j=i+1;j<list->len;j++)
        {
            if(list->data[j]<list->data[i])
                Min=j;
        }
        if(Min!=i)
        {
            temp=list->data[i];
            list->data[i]=list->data[Min];
            list->data[Min]=temp;
        }
    }
    return 0;
}

void combine(seqlist *la,seqlist *lb,seqlist *lc)

    int p=0,q=0;
    while(p<la->len && q<lb->len)
    {
        if(la->data[p]<lb->data[q])
        {    
            lc->data[lc->len]=la->data[p];
            p++;
            lc->len++;
        }
        else
        {
            lc->data[lc->len]=lb->data[q];
            q++;
            lc->len++;
        }

    }
    while(p<la->len)
    {
        lc->data[lc->len++]=la->data[p++];
    }
    while(q<lb->len)
    {
        lc->data[lc->len++]=lb->data[q++];
    }
    
}


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

1.c

#include "head.h"
int main(int argc, const char *argv[])
{
    int n;
    datatype e;
    printf("请输入你要输入的元素个数:");
    scanf("%d",&n);
    seqlist *list=create_seqlist();
    for(int i=0;i<n;i++)
    {
    printf("请输入元素数值:");
    scanf("%d",&e);
    input_seqlist(list,e);
    }
    out_seqlist(list);

//顺序表按元素修改
    datatype key;
    printf("请输入你要修改的值:");
    scanf("%d",&key);
    printf("请输入修改后的值:");
    scanf("%d",&e);
    xiugai_data(list,key,e);
    out_seqlist(list);

//顺序表按元素删除
    printf("请输入你想要删除的元素:");
    scanf("%d",&key);
    delete_data(list,key);
    out_seqlist(list);

//顺序表按元素插入
    printf("请输入你想要在哪个元素处插入:");
    scanf("%d",&key);
    printf("请输入你想要插入的元素值:");
    scanf("%d",&e);
    insert_data(list,key,e);
    out_seqlist(list);

//释放
    free(list);
    list=NULL;

//顺序表排序
//冒泡降序--
    bubble_seqlist(list);
    printf("请输入你要输入的元素个数:");
    scanf("%d",&n);
    list=create_seqlist();
    for(int i=0;i<n;i++)
    {
    printf("请输入元素数值:");
    scanf("%d",&e);
    input_seqlist(list,e);
    }
    out_seqlist(list);
    bubble_seqlist(list);
    out_seqlist(list);

//简单选择升序
   simple_seqlist(list);
   out_seqlist(list);


 //顺序表合并
   seqlist la={11,22,23,45,66};
   la.len=5;

   seqlist lb={12,24,25,44,77};
   lb.len=5;

   seqlist lc;
   lc.len=0;

  
   combine(&la,&lb,&lc);
   out_seqlist(&lc);
    
//顺序表释放空间
   list=free_seqlist(list);
    return 0;
}
 

运行效果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值