既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
void sort(SeqList \*List); //Ascend sort
void reverse(SeqList \*List); //reverse
sort对序列进行升序排列,这里使用了选择排序,每次在无序队列中”选择”出最小值,放到有序队列的最前面。
reverse对序列进行反转,这里并没有借助辅助空间,而是在原空间进行反转(in space)。
void show_list(SeqList \*List); //show
int length(SeqList \* List); //the length of SeqList
void clear(SeqList \*List); //clear
void destroy(SeqList \*List); //destroy
这几个函数并没有太大的技巧。主要完成打印显示、返回当前序列长度、清除序列(List->size=0即可)、销毁序列(一般main函数退出时调用)。
三、代码
SeqList.h
#ifndef \_\_SEQLIST\_H\_\_
#define \_\_SEQLIST\_H\_\_
#include <stdio.h>
#include <malloc.h>
#include <assert.h>
#define SEQLIST\_INIT\_SIZE 8
#define INC\_SIZE 3
typedef int ElemType;
typedef struct SeqList
{
ElemType * base; //存储空间基址
int capacity; //当前分配的存储容量(以sizeof(ElemType)为单位)
int size; // 实际长度
}SeqList;
//function declaration
void InitSeqList(SeqList *list); //initiation
bool IncSeqList(SeqList *list); //increase
void push_back(SeqList *List,ElemType item); //tail insert
void show_list(SeqList *List); //show
void push_front(SeqList *List,ElemType item); //head insert
void pop_back(SeqList *List); //pop tail
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;i<List->size;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; i<List->size/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;i<List->size;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" );
![img](https://img-blog.csdnimg.cn/img_convert/c44a120e0af97dd53554a2256e291352.png)
![img](https://img-blog.csdnimg.cn/img_convert/5664be97aa8dd04d2069515fae754d4f.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
elete\_val\n");
printf("\* [11] sort [12] reverse \n" );
[外链图片转存中...(img-eVzBulX5-1715886339439)]
[外链图片转存中...(img-zILAvweU-1715886339440)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**