day3 数据结构

头文件;

#ifndef   __HEAD_H__
#define   __HEAD_H__

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


void menue();
seqlist *create();
int insert_rear(datatype e,seqlist *list); 
int output(seqlist *list);
int find_sub(seqlist *list,int sub);
int delete(seqlist *list);
int insert_sub(seqlist *list,int sub, int number);
int delete_sub(seqlist *list,int sub);
int update_sub(seqlist *list,int sub,int number) ;
int find_data(seqlist *list,datatype key);

int delete_key(seqlist *list,int key);

int change_key(seqlist *list,int key,int e)

#endif
 

主函数

#include"head.c"
int main(int argc,char*argv[])
{
    menue();
    seqlist *list=create();
    int number;
    while(1)
    {
    
    printf("请输入您的选择:");
    scanf("%d",&number);
    switch(number)
    {
    case 1:
        {
        int n;
        datatype e;
        printf("请输入尾插的个数:");
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
        printf("请输入你要插入的数:");
        scanf("%d",&e);
        insert_rear(e,list);
        }
        }
break;
    case 2:
        {
        output(list);
        }
break;
/*    case 3:
        {
        int number;
        printf("输入查找的数:");
        scanf("%d",&number);
        int sub=find(list,number);
        if(sub==-1)
        {
        printf("查找失败:");
        }
        else
        {
        printf("下标为:%d\n",sub);
        } 
        }
break;*/
    case 4:
        {
        delete(list);
        }
break;
    case 5:
        {
        printf("输入插入的下标:\n");
        int sub;
        scanf("%d",&sub);
        int number;
        printf("输入插入的数:\n");
        scanf("%d",&number);
        insert_sub(list,sub,number);
        }
break;
    case 6:
        {
        int sub;
        printf("输入删除的下标:");
        scanf("%d",&sub);
        delete_sub(list,sub);
        }
break;
    case 7:
        {
        printf("输入更新的下标:");
        int sub;
        scanf("%d",&sub);
        printf("输入更新的数:");
        int number;
        scanf("%d",&number);
         update_sub(list, sub, number); 
        }
break;
    case 8:
        {
        int sub;
        printf("请输入查找下标:\n");
        scanf("%d",&sub); 
        find_sub(list,sub);
        }
break;
    case 9:
        {
        
                    datatype key;
                    printf("请输入查找的元素:");
                    scanf("%d",&key);
                    int flag=find_data(list,key);
                    if(flag==-1)
                    {
                        printf("查找的元素不存在\n");

                    }
                    else
                    {
                        printf("在%d下表出现\n",flag);
                    } 
        }
break;
    default:printf("输入错误,请重新输入你的选择\n");break;
    case 0:printf("退出程序\n");exit(0);

    }
    }

free(list);

list=NULL;
return 0;    
}
自定义函数

#include"head.c"
void menue()
{
     puts("\t******");
    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("\t0,退出整个程序");
    puts("\t*****);

}

//申请空间
seqlist *create()
{
seqlist *list=(seqlist *)malloc(sizeof(seqlist));
if(list==NULL)
{
printf("申请失败:");
return NULL;
}
list->len=0;
return list;
}

//插入元素

int insert_rear(datatype e,seqlist *list)
{
if(list==NULL||list->len==MAXSIZE)
{
printf("插入失败:\n");
return -1;
}
list->data[list->len]=e;
list->len++;
}

//输出

int output(seqlist *list)
{
if(list==NULL||list->len==0)
{
    puts("顺序表为空:");
    return -1;
}
for(int i=0;i<list->len;i++)
{
    printf("%d\t",list->data[i]);
}
puts("");
}

/*int find(seqlist *list,int number)
{
int sub;
if(list==NULL||list->len==0)
{
printf("查找失败:\n");
return -1;
for(int i=0;i<list->len;i++)
{
if(list->data[i]==number)
{
return i;
}
else 
printf("查找失败:\n");
return -1;
}
}
}*/

int find_data(seqlist *list,datatype key)
{
    //1,判断顺序表创建是否成功
    //2,判断顺序表是否空
    if(list==NULL || list->len==0)
    {
        return -1;
    }
    //3,查找
    for(int i=0;i<list->len;i++)
    {
        if(list->data[i]==key)
        {
            return i;
        }
    }
    return -1;
}

删除尾部数据
int delete(seqlist *list)
{
if(list==NULL||list->len==0)
{
printf("删除失败:");
return -1;
}
list->len--;
printf("删除成功:");
return 0;
}

按下表插入数据
int insert_sub(seqlist *list,int sub,int number)
{
if(list==NULL||list->len==0||sub<0||sub>MAXSIZE)
{
printf("插入失败:\n");
}
for(int i=list->len-1;i>=sub;i--)
{
list->data[i+1]=list->data[i];
}
list->data[sub]=number;
list->len++;
puts("插入成功");
return 0;
}

按下标删除数据
int delete_sub(seqlist *list,int sub)
{
if(list==NULL||list->len==0||sub<0||sub>MAXSIZE)
{
printf("删除失败:\n");
return -1;
}
for(int i=sub+1 ;i<list->len;i++)
{
list->data[i-1]=list->data[i];
}

list->len--;
return 0;

}

按下标更新数据
int update_sub(seqlist *list,int sub,int number) 
{
if(list==NULL||list->len==0||sub<0||sub>=list->len)
{
printf("更新失败:\n");
return -1;
}

list->data[sub]=number;
puts("更新成功:");
return 0;


}

按元素查找
int find_sub(seqlist *list,int sub)

{
if(list==NULL||list->len==0||sub<0||sub>list->len)
{
printf("查找失败:\n");
return -1;
}
printf("查找的元素是:%d\n",list->data[sub]);
return 0;

}


//按元素删除
int delete_key(seqlist *list,int key)
{
    int sub=search_sub(list,key);
    if(sub==-1)
    {
        return -1;
    }
    delete_sub(list,sub);
    return 0;
}
 
//按元素修改
int change_key(seqlist *list,int key,int e)
{
    int sub=search_sub(list,key);
    if(sub==-1)
    {
        return -1;
    }
    if(list==NULL||empty_seqlist(list)||sub<0||sub>=list->len)
    {
        printf("修改失败\n");
        return -1;
    }
    list->data[sub]=e;
    printf("修改成功\n");
}
 
//顺序表排序
int sort_seqlist(seqlist *list)
{
    if(empty_seqlist(list))
    {
        printf("排序失败\n");
        return -1;
    }
    for(int i=1;i<list->len;i++)
    {
        int max=list->data[i];
        for(int j=0;j<list->len-i;j++)
        {
            if(list->data[j]>list->data[j+1])
            {
                int max=list->data[j];
                list->data[j]=list->data[j+1];
                list->data[j+1]=max;
            }
        }
    }
    printf("排序成功\n");
    return 0;
}

————————————————
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值