1.main函数
#include"SeqList.h"
void TestSeqList()
{
SeqList seqlist; //seqList这个变量并没有初始化
SeqListInit(&seqlist);
//要传的是地址
/*
原因:
(1)如果要初始化的话,肯定要改变他们的值,
如果要改变值的话,那么就只能传递指针了,不然只是一份临时拷贝,
实际上并没有改变
(2)传递的话,最好还是穿指针,因为传结构体不知道需要多少空间,
相比之下,还是指针的所占的空间小一点。指针比结构体大小要小
*/
//尾插
SeqListPushBack(&seqlist,1);
SeqListPushBack(&seqlist,2);
SeqListPushBack(&seqlist,3);
SeqListPushBack(&seqlist,4);
SeqListPrint(&seqlist);//这里是打印,这一步的打印结果应该为1,2,3,4;
//头插
SeqListPushFront(&seqlist, 10);
SeqListPushFront(&seqlist, 20);
SeqListPushFront(&seqlist, 30);//这一次打印的结果是30,20,10,1,2,3,4;
SeqListPrint(&seqlist);
SeqListInsert(&seqlist, 4, 100);
SeqListPrint(&seqlist);
//释放
SeqListDestroy(&seqlist);
}
int main()
{
TestSeqList();
return 0;
}
2.SeqList.h
#pragma once//包含头文件只包含一次
typedef struct SeqList
{
int *array; //记录数据存放位置
int capacity; //记录总容量
int size; //记录已有数据的个数
}SeqList;
//为结构体起一个别名
//typedef struct SeqList SeqList;
void SeqListInit(SeqList* seq);
void SeqListDestroy(SeqList* seq);
void SeqListPushFront(SeqList* seq, int val);
void SeqListPushBack(SeqList* seq, int val);
void SeqListPrint(SeqList* seq);
//根据下标做插入
void SeqListInsert(SeqList* seq, int index, int val);
3.SeqList.c
#include"SeqList.h"
#include<stdio.h>
#include<malloc.h>
#define DEFAULT_CAPACITY (16)
void SeqListInit(SeqList* seq)
{
//申请空间
//记录容量
//size =0;
seq->array = (int*)malloc(sizeof(int) * DEFAULT_CAPACITY);
seq->capacity = DEFAULT_CAPACITY;
seq->size = 0;
}
void SeqListDestroy(SeqList* seq)
{
free(seq->array);
seq->capacity = 0;
seq->size = 0;
}
void SeqListPushFront(SeqList* seq, int val)
{
for (int i = seq->size - 1; i >= 0; i--)
{
seq->array[i + 1] = seq->array[i];
}
seq->array[0] = val;
seq->size++;
}
void SeqListPushBack(SeqList* seq, int val)
{
//先不考虑放不下的问题
seq->array[seq->size] = val;
seq->size++;
}
//根据下标做插入
void SeqListInsert(SeqList* seq, int index, int val)
{
//首先判断下表的合法性
if (index<0 || index>seq->size)
{
printf("输入下标非法,请重新输入\n");
}
for (int i = seq->size; i>index; i--)
{
seq->array[i] = seq->array[i-1];
}
seq->array[index] = val;
seq->size++;
}
void SeqListPrint(SeqList* seq)
{
for (int i = 0; i < seq->size; i++)
{
printf("%d ", seq->array[i]);
}
printf("\n");
}