数据结构—顺序表的插入

数据结构第一篇-顺序表


  刚开始复习数据结构,感觉还是蛮吃力的,基础不是很好有太多不明白的点了,还好有个耐心极棒的蓝朋友(献花),虽然现在还不是很明白,但是我相信继续学习下去一定会拨开乌云的。

知识点:malloc函数原型:extern void* malloc(unsigned int num_bytes)

realloc函数原型:extern void* realloc(void* mem_address,unsigned int newsize),void*mem_address表示要改变内存大小的指针名,即要改变的是哪个指针指向的内存,unsigned int newsize是指要分配的新的大小(要大于原来的大小)


#define  _CRT_SECURE_NO_WARNINGS
#include 
#include 
#define LISTINCREASE 10
#define N 5


typedef struct
{
int* BASE; //需要一段空间


int LISTSIZE; //知道分配了多少空间*4


int LENGTH; //顺序表里的元素个数


//以上三个元素都是要你自己时刻维护的。
} LIST;


void INIT_LIST(LIST* list)
{
list->LISTSIZE = 200;
list->BASE = (int*)malloc(sizeof(int) * list->LISTSIZE);
list->LENGTH = 0;
}


/*******
void CREAT(LIST *list, int a[], int n)
{
int i;
for (i = 0; i < n; i++) 
list->BASE[i] = a[i];
list->LENGTH = n;
}
************/


void LISTINSERT(LIST* list, int i, int e)
{
int index;      //最后一个元素的下标,注意数组中下标与位置的关系
if (i < 1 || i>list->LENGTH + 1)
return;
if (list->LENGTH > list->LISTSIZE)
{
list->BASE = (int *)realloc(list->BASE, (list->LISTSIZE + LISTINCREASE)*sizeof(int));
if (!list->BASE)
return;
list->LISTSIZE = list->LISTSIZE + LISTINCREASE;


}


for (index = list->LENGTH-1; index >= i - 1; index--)
{
list->BASE[index+1] = list->BASE[index];
}
list->BASE[i-1] = e;
list->LENGTH++;


}


/******
void PRINT(LIST* list)
{
int i;
for (i = 0; i < list->LENGTH; i++) 
printf("%d ", list->BASE[i]);
printf("\n");
}
************/

int main()
{

LIST mylist;

//mylist = NULL;这部分注释是因为之前将LIST mylist用LIST*mylist形式,这种形式也可以不过要加上下面那句注          释掉的才可以,自己要仔细琢磨一下,刚入门指针那块比较模糊。
//mylist = (LIST*)malloc(sizeof(LIST));


INIT_LIST(&mylist);
for (int i = 0; i < N; i++)
{
scanf("%d", &mylist.BASE[i]);
mylist.LENGTH++;     //这一句我刚开始没有加导致结果出错,因为LENGTH初始化为0,输入一个数后也要    将维护的LENGTH相应的加1
}

//CREAT(&mylist, a, 5);也可以用函数来实现输入输出

LISTINSERT(&mylist, 3, 66);

//PRINT(&mylist);

for (int i = 0; i < N+1; i++)
{
printf("%d ", mylist.BASE[i]);
}



return 0;
}


你可能感兴趣的:(数据结构)