线性表的顺序表示及实现_线性表的顺序表示与实现数据实验学会了如何克服困难(2)

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

void pop_front(SeqList *List); //pop head

void insert_pos(SeqList *List,int pos,ElemType item); //insert value at pos
int find_val(SeqList *List,ElemType item); //find the pos of value
int length(SeqList * List); //the length of SeqList
void delete_pos(SeqList *List,int pos); //delete value at pos
void delete_val(SeqList *List,ElemType item); //delete value

void sort(SeqList *List); //Ascend sort
void reverse(SeqList *List); //reverse
void clear(SeqList *List); //clear
void destroy(SeqList *List); //destroy
#endif // __SEQLIST_H__


SeqList.cpp



#include “SeqList.h”

void InitSeqList(SeqList list)
{
list->base = (ElemType
)malloc(sizeof(ElemType)*SEQLIST_INIT_SIZE);
assert(list->base != NULL);

list->capacity = SEQLIST_INIT_SIZE;
list->size =0;

}

//success: true
bool IncSeqList(SeqList list)
{
ElemType newbase = (ElemType)realloc(list->base,sizeof(ElemType)
(SEQLIST_INIT_SIZE+INC_SIZE));
if(newbase == NULL)
{
printf(“Insufficient memory space allocation\n”);
return false;
}

list->base = newbase;
list->capacity = SEQLIST_INIT_SIZE + INC_SIZE;

return true;

}

//insert
void push_back(SeqList *List,ElemType item)
{

//原分配空间已满,且增配空间失败
if(List->size >= List->capacity && !IncSeqList(List))
{
    printf("SeqList has full,value %d can't insert tail\n",item);
    return ;
}
List->base[List->size] = item;

List->size++;

}
void push_front(SeqList *List,ElemType item)
{
//原分配空间已满,且增配空间失败
if(List->size >= List->capacity && !IncSeqList(List))
{
printf(“SeqList has full,value %d can’t insert head\n”,item);
return ;
}

//从0开始全部右移1位(如果没有元素,不进入循环)
for(int i=List->size;i >0; i--)
{
    List->base[i] = List->base[i-1];
}

//坐标为0,插入新元素
List->base[0] = item;

//添加了新元素,当前计数+1
List->size++;
//printf("hello world \n");

}

void pop_back(SeqList *List)
{
//如果没有元素
if(List->size == 0)
{
printf(“no element,can not delete\n”);
return ;
}
printf(“delete tail value:%d\n”,List->base[List->size-1]);

//删除(最后)一个元素,当前计数自减
List->size--;

}
void pop_front(SeqList *List)
{
//如果没有元素
if(List->size == 0)
{
printf(“no element,can not delete\n”);
return ;
}
printf(“delete head value:%d\n”,List->base[0]);

//从下标1开始全部左移
for(int i=0;i<List->size-1;i++)
{
    List->base[i] = List->base[i+1] ;
}
//删除(第)一个元素,当前计数自减
List->size--;

}

void insert_pos(SeqList *List,int pos,ElemType item)
{
//判断位置是否合法(为0,即头插; 为size即尾插)
if(pos<0 || pos>List->size)
{
printf(“insert pos illegal,can’t insert\n”);
return ;
}

//原分配空间已满,且增配空间失败
if(List->size >= List->capacity && !IncSeqList(List) )
{
    printf("SeqList has full,value %d can't insert at pos \n",item);
    return ;
}

//size为即将插入位置,全部左移,留出pos
for(int i=List->size; i>pos; i--)
{
    List->base[i] = List->base[i-1];
}

List->base[pos] = item;

List->size++;

}

int find_val(SeqList *List,ElemType item)
{
//找到第一个匹配值的坐标
for(int i=0;isize;i++)
{
if(item == List->base[i])
{
return i;
}
}

return -1;
}

int length(SeqList * List)
{
return List->size;
}

void delete_pos(SeqList *List,int pos)
{
if(pos <0 || pos >= List->size)
{
printf(“delete pos illegal,can’t delete\n”);
return ;
}

//从pos+1处全部左移
for(int i=pos; i<List->size-1;i++)
{
    List->base[i] = List->base[i+1];
}

List->size--;

}

void delete_val(SeqList *List,ElemType item)
{
int pos;
pos = find_val(List,item);

if(pos < 0 )
{
    printf("value %d not found!\n",item);
    return ;
}
delete_pos(List,pos);

}
/*选择排序:每次在无序队列中"选择"出最小值,放到有序队列的最前*/
void sort(SeqList *List)
{
if(List->size == 0 || List->size ==1)
return;

int temp;
int min;
for(int i=0; i<List->size; i++)
{
    min = i;
    for(int j= i+1;j<List->size;j++)
    {
        if (List->base[j] < List->base[min])
            min=j;
    }

    //交换最小数
    if(min != i)
    {
        temp =  List->base[min];
        List->base[min] =  List->base[i];
        List->base[i] = temp;
    }

}

}

void reverse(SeqList *List)
{
int temp;
for(int i=0; isize/2; i++)
{
temp = List->base[i];
List->base[i] = List->base[List->size-1-i];
List->base[List->size-1-i] = temp;
}

}

void clear(SeqList *List)
{
List->size = 0;
}

void destroy(SeqList *List)
{
free(List->base);
List->base = NULL;
List ->capacity = 0;
List ->size = 0;

return ;

}
void show_list(SeqList *List)
{
for(int i=0;isize;i++)
{
printf("%d ",List->base[i]);
}

printf("\n");

}


main.cpp



#include “SeqList.h”

int main()
{
ElemType item;
SeqList myList;
InitSeqList(&myList);

int select = 1;
int pos=0;
//int res =0;
while (select)
{
    printf("\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\n");
    printf("\* [1] push\_back [2] push\_front \n");
    printf("\* [3] show\_list [4] pop\_back \n");
    printf("\* [5] pop\_front [6] insert\_pos \n");
    printf("\* [7] find\_value [8] length \n");
    printf("\* [9] delete\_pos [10] delete\_val\n");
    printf("\* [11] sort [12] reverse \n"  );
    printf("\* [13] clear [14\*] destroy \n" );
    printf("\* [0] quit\_system \n");
    printf("\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\n");
    printf("do some choice:");
    scanf("%d",&select);
    if(select == 0)
        break;
    switch(select)
    {

        case 1:
            printf("tail insert:");
            while(scanf("%d",&item),item != -1)
            {
                push_back(&myList,item);//尾插
            }
            break;
        case 2:
            printf("head insert:");
            while(scanf("%d",&item),item != -1)
            {
                push_front(&myList,item);//头插
            }
            break;
        case 3:
            show_list(&myList); //显示
            break;
        case 4:
            pop_back(&myList); //删除最后一个元素(如果有)
            break;
        case 5:
            pop_front(&myList); //删除第一个元素(如果有)
            break;
        case 6:
             printf("input insert pos>");
             scanf("%d",&pos);
             printf("input value>");
             scanf("%d",&item);
             //printf("%d %d",pos,item);
             insert_pos(&myList,pos,item);//在特定下标处插值
            break;
        case 7:
            printf("input find value>");
            scanf("%d",&item);
            pos=find_val(&myList,item);//查找值的下标
            if(pos <0)
                printf("can not find %d\n",item);
            else
                printf("find %d at pos %d\n",item,pos);
            break;
        case 8:
            printf("the length of SeqList is %d\n",length(&myList)); //当前长度
            break;
        case 9:
            printf("input delete pos>");
            scanf("%d",&pos);
            delete_pos(&myList,pos); //删除特定下标处值
            break;
        case 10:
            printf("input delete value>");
            scanf("%d",&item);
            delete_val(&myList,item); //删除特定值(找不到值时不会报错)

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

em);
delete_val(&myList,item); //删除特定值(找不到值时不会报错)

[外链图片转存中…(img-6dHfIjWD-1715886372519)]
[外链图片转存中…(img-XPWu0C5E-1715886372519)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值