day18

头文件

#ifndef _MAIN_C_
#define _MAIN_C_
#define MAX 40
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int datatype;
typedef struct
{
    datatype data[MAX];
    int len;
}seqlist,*seqlistptr;

//创建顺序表
seqlistptr list_create();
//判空
int list_full(seqlistptr S);
//判满
int list_empty(seqlistptr S);
//添加
int list_add(seqlistptr S,datatype e);
//遍历
void list_put(seqlistptr S);
//插入
int list_insert_pos(seqlistptr S,int pos,datatype e);
//删除
int list_del(seqlistptr S,int pos,datatype e);
//修改位置

//修改值
int list_xg(seqlistptr S,int pos,datatype e);
//查找指定位置的元素

//按值查找
int list_search_value(seqlistptr S,datatype e);
//将顺序表排序
void list_sort(seqlistptr S,int flag);
//去重

//求最值
datatype list_mvalue(seqlistptr S);
//顺序表反转
void list_reverse(seqlistptr S);
#endif
 

函数代码

#include "main.c"
seqlistptr list_create()
{
    seqlistptr S = (seqlistptr)malloc(sizeof(seqlist));
    if(NULL==S)
    {
        printf("创建失败\n");
            return NULL;
    }
    memset(S->data,0,sizeof(S->data));
    S->len=0;
    printf("顺序表创建成功\n");
    return S;
}

int list_full(seqlistptr S)
{
    if(NULL==S)
    {
        printf("所给顺序表不合法\n");
            return -1;
    }
    return S->len == MAX;
}

int list_empty(seqlistptr S)
{
    if(NULL==S)
    {
        printf("所给顺序表不合法\n");
            return 0;
    }
    return S->len == 0;    
}
int list_add(seqlistptr S,datatype e)
{
    if(NULL==S||list_full(S))
    {
        printf("添加失败\n");
            return -1;
    }
    S->data[S->len] = e;
    S->len++;
    printf("添加成功\n");
    return 1;
}
void list_put(seqlistptr S)
{
    if(NULL==S||list_empty(S))
    {
        printf("遍历失败\n");
        return ;
    }
    printf("当前顺序表的元素分别是:");
    for(int i=0;i<S->len;i++)
    {
        printf("%d\t",S->data[i]);
    }
    putchar(10);
}
int list_insert_pos(seqlistptr S,int pos,datatype e)
{
    if(NULL==S||list_empty(S)||pos<0||pos>S->len)    
    {
        printf("插入失败\n");
        return 0;
    }
    printf("插入之后的数据:\n");
    for(int i=S->len-1;i>=pos;i--)
    {
        S->data[i+1]=S->data[i];
    }
    S->data[pos]= e;
    S->len++;
}

int list_del(seqlistptr S,int pos,datatype e)
{
    if(NULL==S||list_empty(S)||pos<0||pos>S->len)    
    {
        printf("删除失败\n");
        return 0;
    }
    printf("删除之后的:\n");
    for(int i=pos;i<S->len;i++)
    {
        S->data[i]=S->data[i+1];
    }
    S->len--;
}
int list_xg(seqlistptr S,int pos,datatype e)
{
    if(NULL==S||list_empty(S)||pos<0||pos>S->len)    
    {
        printf("修改失败\n");
        return 0;
    }
    printf("修改之后\n");
    S->data[pos]=e;
}
/*************查找*************/
int list_search_value(seqlistptr S,datatype e)
{
    if(NULL==S||list_empty(S))    
    {
        printf("查无此数据\n");
        return 0;
    }
    for(int i=0;i<S->len;i++)
    {
        if(S->data[i]==e){
            printf("第%d个数据是该数据\n",i+1);
        }
    }
}
/***************排序***************/
void list_sort(seqlistptr S,int flag)
{
    if(NULL==S||list_empty(S))    
    {
        printf("无法排序\n");
    }
    int k=0,temp;
    if(flag==0)
    {
        printf("升序\n");
    for(int i=1;i<S->len;i++)
    {
        k=i-1;
        for(int j=i-1;j<S->len;j++)
        {
            if(S->data[k]>S->data[j])
            {
                k=j;
            }
        }
        if(k!=i-1)
        {
            temp=S->data[k];
            S->data[k]=S->data[i-1];
            S->data[i-1]=temp;
        }
    }
    }
    if(flag==1)
    {
        printf("降序\n");    
    for(int i=1;i<S->len;i++)
    {
        k=i-1;
        for(int j=i-1;j<S->len;j++)
        {
            if(S->data[k]<S->data[j])
            {
                k=j;
            }
        }
        if(k!=i-1)
        {
            temp=S->data[k];
            S->data[k]=S->data[i-1];
            S->data[i-1]=temp;
        }
    }
    }
}
/*************求最值*****************/
datatype list_mvalue(seqlistptr S)
{
    if(NULL==S||list_empty(S))    
    {
        printf("无法求最值\n");
    }
    int max=0,min=S->data[0];
    for(int i=0;i<S->len;i++)
    {
        if(S->data[i]>max)
        {
            max=S->data[i];
        }
        if(S->data[i]<min)
        {
            min=S->data[i];
        }
    }
    printf("最大值为%d\n",max);
    printf("最小值为%d\n",min);
}
/**************反转**********/
void list_reverse(seqlistptr S)
{
    if(NULL==S||list_empty(S))    
    {
        printf("无法反转\n");
    }
    printf("反转之后\n");
    int j=S->len/2,temp,k;
    for(int i=0,k=S->len-1;i<j,k>(S->len-j-1);i++,k--)
    {
        temp=S->data[i];
        S->data[i]=S->data[k];
        S->data[k]=temp;
    }
}
 

主函数

#include "main.c"
int main(int argc, const char *argv[])
{
    seqlistptr S = list_create();
    if(NULL ==S)
    {
        return -1;
    }
    list_add(S,3);
    list_add(S,6);
    list_add(S,5);
    list_put(S);
    list_insert_pos(S,2,4);
    list_put(S);
    list_del(S,2,4);
    list_put(S);
    list_xg(S,2,4);
    list_put(S);
    list_search_value(S,3);
    list_sort(S,1);
    list_put(S);
    list_sort(S,0);
    list_put(S);
    list_mvalue(S);
    list_reverse(S);
    list_put(S);
    return 0;
}
结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值