列表函数封装,seqlist函数封装

这篇博客展示了如何使用C语言实现顺序列表的封装,包括创建、初始化、清空、获取长度、判断是否为空、是否已满、显示、插入、删除、按位置和数据搜索及更改元素等功能。通过`seqlist.h`、`seqlist.c`和`main.c`三个文件的代码详细阐述了具体实现过程。
摘要由CSDN通过智能技术生成

过程:

seqlist.h文件

*==z00=============================================
 *   文件名称:seqlist.h
 *   创 建 者:     
 *   创建日期:2022年08月17日
 *   描    述:
 ================================================*/
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include <stdbool.h>
#define MAXSIZE 100
typedef int data_t;
typedef  struct List{
    data_t data [MAXSIZE];
    int last;

}sqlist_t;
//creat and initialize
sqlist_t *sqlist_create();
void sqlist_init(sqlist_t **L);
//clear or destroy
void sqlist_clear(sqlist_t *L);
//length
int get_length(sqlist_t *L);
//empty
bool is_empty(sqlist_t *L);
//full
bool is_full(sqlist_t *L);
//display
void sqlist_show(sqlist_t *L);
//insert
int sqlist_insert(sqlist_t *L,data_t x,int pos);
//delete
int sqlist_delete(sqlist_t *L,int pos);
//search
int sqlist_search_by_pos(sqlist_t *L,int pos);
int sqlist_search_by_data(sqlist_t *L,data_t x);
//change
int sqlist_change_by_pos(sqlist_t *L,data_t x,int pos);
int sqlist_change_by_data(sqlist_t *L,data_t oval,data_t nval);
#endif
main.c

/*===============================================
 *   文件名称:main.c
 *   创 建 者:     
 *   创建日期:2022年08月17日
 *   描    述:
 ================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "seqlist.h"

int main(int argc, char *argv[])

#if 1
    sqlist_t *L=sqlist_create();
    printf("%p\n",L);
#else
    sqlist_t *L=NULL;
    sqlist_init(&L);
    printf("%p\n",L);
#endif

    sqlist_clear(L);
    if(is_empty(L)) 
        printf("yes\n");
    else
        printf("no\n");

      int i=0;
      while (i<10){
      sqlist_insert(L,i+1,i);
      i++;
      }
      sqlist_insert(L,56,4);
      sqlist_show(L);
      sqlist_delete(L,5);
      sqlist_show(L);
      printf("sqlist_search_by_pos(L,5)所查位置的值是:%d\n",sqlist_search_by_pos(L,5));
      sqlist_change_by_pos(L,404,8);
      sqlist_show(L);
      sqlist_change_by_data(L,404,401);
      sqlist_show(L);
}

seqlist.c

#include <stdio.h>
#include <stdlib.h>
#include  <unistd.h>
#include <string.h>
#include  "seqlist.h"
//create
sqlist_t *sqlist_create()
{
    sqlist_t *list=(sqlist_t*)malloc(sizeof(sqlist_t));
    if(list == NULL)
    {   
        perror("malloc");
        return NULL;
    }
    printf("create success\n");
    memset(list,0,sizeof(sqlist_t));
    list->last=-1;
    return list;
}

//initialize
void sqlist_init(sqlist_t **L)
{
    *L=(sqlist_t*)malloc(sizeof(sqlist_t));
    if(*L==NULL)
        return;
    printf("success\n");
    (*L)->last=-1;
}

//clear
void sqlist_clear(sqlist_t *L)
{
    if(L==NULL)

    {
        printf("sqlist not exist\n");
        return;
    }
    L->last=-1;
}
//length
int get_length(sqlist_t *L)
{
    if(L==NULL)
    {
        printf("sqlist not exist\n");
        return -1;
    }
    return L->last+1;
}

//empty
bool is_empty(sqlist_t *L)
{
    return L->last==-1?true:false;
}
//full
bool is_full(sqlist_t *L)
{
    return (L->last==(MAXSIZE-1));
}

//show
void sqlist_show(sqlist_t *L)
{
    if(L==NULL)
        return;
    int i;
    for (i=0;i<=L->last;i++)
        printf("data[%d]=%d\n",i,L->data[i]);
    printf("----------------------------------\n");
}
//insert
int sqlist_insert(sqlist_t *L,data_t x,int pos)
{
    if(L==NULL)
    {
        printf("sqlist not exist\n");
        return -1;
    }
    if(is_full(L)||pos>L->last+1||pos<0)
    {
       printf("sqlist can not insert\n");
       return -1;
    }
    int i;
    for(i=L->last;i>=pos;i--)

     L->data[i+1]=L->data[i];
     L->data[pos]=x;
     L->last++;
     return 1;
     }

//delete
int sqlist_delete(sqlist_t *L,int pos)
{
  if(L==NULL)
  {
    return -1;
  }
  if(is_empty(L)||pos<0||pos>L->last)
  {
   printf("sqlist can not delete\n");
   return -1;
  }
  int i;
  for(i=pos;i<L->last;i++)
  L->data[i]=L->data[i+1];
  L->last--;
  return 0;
}

//search
int sqlist_search_by_pos(sqlist_t *L,int pos)
{
  if(L==NULL)
      return -1;
 if(is_empty(L)||pos<0||pos>L->last)
     return -1;
 int i;
for(i=0;i<=L->last;i++)
   if(i==pos){
    L->data[pos]=L->data[i];
   }
return L->data[pos];
}

//change
int sqlist_change_by_pos(sqlist_t *L,data_t x,int pos)
{ if(L==NULL)
    return -1;
    if(is_empty(L)||pos<0||pos>L->last)
        return -1;
    L->data[pos]=x;

}

int sqlist_change_by_data(sqlist_t*L,data_t oval,data_t nval)
{
    if(L==NULL)
        return -1;
    if(is_empty(L))
        return -1;
    int i,flag=0;
    for(i=0;i<L->last+1;i++)
    {
     if(L->data[i]==oval){
        L->data[i]=nval;
        flag=1;
     }

    }
     return flag;
}
 

结果:create success
0x55be5a5cc2a0
yes
data[0]=1
data[1]=2
data[2]=3
data[3]=4
data[4]=56
data[5]=5
data[6]=6
data[7]=7
data[8]=8
data[9]=9
data[10]=10
----------------------------------
data[0]=1
data[1]=2
data[2]=3
data[3]=4
data[4]=56
data[5]=6
data[6]=7
data[7]=8
data[8]=9
data[9]=10
----------------------------------
sqlist_search_by_pos(L,5)所查位置的值是:6
data[0]=1
data[1]=2
data[2]=3
data[3]=4
data[4]=56
data[5]=6
data[6]=7
data[7]=8
data[8]=404
data[9]=10
----------------------------------
data[0]=1
data[1]=2
data[2]=3
data[3]=4
data[4]=56
data[5]=6
data[6]=7
data[7]=8
data[8]=401
data[9]=10
----------------------------------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是PrintList函数的代码: void PrintList(SeqList list){ for(int i=0; i<list.length; i++){ printf("%d ", list.data[i]); } } 这个函数会遍历顺序表中的所有元素,并将它们依次输出。 ### 回答2: 编写PrintList函数,我假设顺序表SeqList是用数组来表示的。那么,我们可以遍历数组,逐个输出数组中的元素,即可实现PrintList函数的功能。 以下是代码示例: ```python def PrintList(SeqList): for i in SeqList: print(i, end=" ") SeqList = [1, 2, 3, 4, 5] PrintList(SeqList) ``` 在上述示例中,通过for循环遍历顺序表SeqList中的元素,并使用print函数逐个输出。为了保持元素之间的间隔较为美观,我们使用了print函数的end参数,将每个元素之间的分隔符设为了一个空格。 当我们运行该示例时,输出结果为: 1 2 3 4 5 这样,我们就成功实现了PrintList函数,输出了顺序表SeqList的所有元素。 ### 回答3: 编写一个函数PrintList,可以用来输出顺序表SeqList中的所有元素。 函数的输入参数为SeqList,表示要输出的顺序表。顺序表SeqList可以用一个一维数组来表示,数组的大小为n,元素的类型为int。 函数的实现如下: 1. 首先,我们需要遍历顺序表SeqList中的所有元素。可以使用一个循环来实现,循环的变量i可以用来表示当前遍历到的位置,初始化为0。 2. 在循环中,我们可以使用一个临时变量temp来存储当前遍历到的元素。可以通过访问SeqList[i]来得到当前位置的元素。 3. 输出temp的值,可以使用printf函数来实现。输出的格式根据题目要求进行调整。 4. 将i的值增加1,继续下一次循环,直到遍历完整个顺序表。 5. 函数的返回值为空。 代码示例: ``` #include <stdio.h> void PrintList(int SeqList[], int n) { int i; for (i = 0; i < n; i++) { int temp = SeqList[i]; printf("%d ", temp); } } int main() { int SeqList[] = {1, 2, 3, 4, 5}; int n = sizeof(SeqList) / sizeof(SeqList[0]); PrintList(SeqList, n); return 0; } ``` 以上代码实现了PrintList函数,可以输出顺序表SeqList中的所有元素。我们在主函数中定义了一个顺序表SeqList,并将其作为参数传递给PrintList函数进行输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值