7.18课后作业

二、写出有关顺序表的所有操作

seqlist.h

#ifdef SEQLIST_H
#define SEQLIST_H
#define MAX 20
#include <stdio.h>
typedef int datatype;
typedef  struct 
{
    datatype data[MAX];
    int len;
}Seqlist,*SeqListPtr;
//声明顺序表创建函数
SqeListPtr list_creat();
//判空函数
int list_empty(SeqListPtr L);
//判满函数
int list_full(SeqListPtr L);
//添加元素
int list_add(SeqListPtr L, datatype e);
//遍历顺序表
void list_show(SeqListPtr L);
//定义任意位置插入函数 
int list_insert_pos(SeqListPtr L, int pos, datatype e);
//定义任意位置删除函数
int list_delete_pos(SeqListPtr L, int pos);
//定义按值查找位置函数
int list_search_value(SeqListPtr L, datatype e);
//按位置进行修改
int list_update_pos(SeqListPtr L, int pos, datatype e);
//按值进行修改
int list_update_value(SeqListPtr L, datatype old_e, datatype new_e);


#endif

seqlist.c

#include "seqlist.h"
#include <stdio.h>
typedef int datatype;
#define MAX 20
typedef  struct 
{
    datatype data[MAX];
    int len;
}SeqList,*SeqListPtr;
//在堆区申请一个空间
SeqListPtr list_creat()
  {
    SeqListPtr L=(SeqListPtr)malloc(sizeof(SeqList));
    if(L == NULL)
    {
        printf("创建失败\n");
        return NULL;
    }
    memset(L->data,0,sizeof(L->data)); //数组初始化
    L->len =0;  //顺序表长度为0
    printf("创建成功\n");
    return L;
  }

  //判空函数,空返回真,非空返回假
  int list_empty(SeqListPtr L)
  {
      return L->len==0;
  }
  //判满函数,满返回真,非满返回假
  int list_full(SeqListPtr L)
  {
    return L->len==MAX;
  }
  //添加元素
  int list_add(SeqListPtr L,datatype e)
  {
    //判断逻辑
    if(L == NULL||list_full(L))
    {
        printf("输入失败\n");
        return -1;
    }
    //将要添加的元素放在最后一个位置
    L->data[L->len]=0;
    L->len++;
    printf("添加成功\n");
    return 0;
  }
   //遍历顺序表
   void list_show(SeqListPtr L)
   {
      //判断逻辑
      if(L == NULL||list_empty(L))
      {
        printf("遍历失败\n");
        return ;
      }
      //遍历
      for(int i=0;i<L->len;i++)
      {
        printf("%d\t",L->data[i]);
      }
     printf("\n");
   }
   //定义任意位置插入函数
   int list_insert_pos(SeqListPtr L,int pos,datatype e)
   {
       //判断逻辑
       if(NULL == L||list_full(L)||pos<0||pos>L->len)
       {
        printf("插入失败\n");
        return -1;
       }
       //腾空逻辑
       for(int i=L->len-1;i>=pos;i--)
       {
         L->data[i+1]=L->data[i];//将前面的元素往后移
       }
       //插入数据
       L->data[pos]=e;
       //表长变化
       L->len++;
       printf("输入成功\n");
       return 0;
   }
   //定义任意位置删除函数
   int list_delete_pos(SeqListPtr L,int pos)
   {
      if(NULL == L||list_empty(L)||pos<0||pos>L->len)
      {
        printf("删除失败\n");
        return -1;
      }
      //删除逻辑
      for(int i=pos;i<L->len-1;i++)
      {
        L->data[i-1]=L->data[i];//将后面的元素往前移
      }
      //表长度变化
      L->len--;
      printf("删除成功\n");
      return 0;
   }
   //定义按值查找函数
   int list_search_value(SeqListPtr L,datatype e)
   {
    //判断逻辑
    if(NULL == L||list_empty(L))
    {
        printf("查找失败\n");
        return -1;
    }
    for(int i=0;i<L->len;i++)
    {
        if(L->data[i]== e)
        {
            return i;
        }
        printf("找不到此函数\n");
        return 0;
    }
   }
   //定义按位置修改函数
   int list_update_pos(SeqListPtr L,int pos,datatype e)
   {
    if(NULL == L||list_empty(L)||pos<0||pos>=L->len)
    {
        printf("修改失败\n");
        return -1;
    }
    
    L->data[pos]=e;
    printf("修改成功\n");
    return 0;
   }
   //定义按值修改函数
   int list_update_value(SeqListPtr L,datatype old_e,datatype new_e)
   {
      //判断逻辑
      if(NULL == L||list_empty(L))
      {
        printf("修改失败\n");
        return -1;
      }
      //根据旧值找位置
     int res=list_search_value(L,old_e);
     if(res ==-1)
     {
        printf("没有要修改的值\n");
        return -1;
     }
     //调用函数进行修改
     list_update_pos(L,res,new_e);
     printf("修改成功\n");
     return 0;
   }

main.c

#include "seqlist.h"
#include <stdio.h>
#define MAX 20
typedef int datatype;
typedef  struct 
{
    datatype data[MAX];
    int len;
}SeqList,*SeqListPtr;
int main(int argc, char const *argv[])
{
    //创建顺序表
    SeqListPtr L = list_creat();
        if(L == NULL)
        {
            return -1;
        }
        //调用添加函数
    list_add(L, 520);
    list_add(L, 1314);
    list_add(L, 999);
    list_add(L, 666);
    //调用遍历函数
    list_show(L);
    //调用任意位置插入函数
    list_insert_pos(L, 0, 100);
    list_insert_pos(L, 2, 100);
    list_insert_pos(L, 6, 100);
    //输出
    list_show(L);
    //调用删除函数
    list_delete_pos(L, 3);
    list_show(L);
    //调用查找函数
    int res = list_search_value(L, 999);
    if(res >= 0)
    {
        printf("您要找的元素在第%d个位置\n", res+1);
    }
    //调用按位置修改函数
    list_update_pos(L, 0, 1234);
    list_show(L);
    //调用按值修改函数
    list_update_value(L, 999, 888);
    list_show(L);
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值