//==============stu.h 头文件==============
#ifndef _STU_H
#define _STU_H
{
char sno[5];
char name[21];
char sex[3];
int score;
}ElemType;
#endif
//==============list.h头文件==============
#ifndef _LIST_H
#define _LIST_H
#define LIST_INIT_SIZE 10
#define LIST_INCREME 10
typedef struct
{
ElemType *elem; //这个是开辟线性表的
int length; //已用空间
int size; //当前开辟的长度
}LIST;
LIST *InitLIST();
void FreeList(LIST *l);
int InsertList(LIST *list,int position,ElemType *e);
int DeleteList(LIST *l,int position);
#endif
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
//==============list.c头文件==============
#include <stdlib.h>
#include <stdio.h>
#include "stu.h"
#include "list.h"
LIST *InitLIST()
{
LIST *l = (LIST *)malloc(sizeof(LIST));//开辟结构休大小的空间,数据存储大小还没有开辟
if(l == NULL)
{
exit(0);
}
printf("LIST结构开辟成功!\n");
l->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));//开辟LIST_INIT_SIZE 个ElemType的空间
if(l->elem == NULL)
{
free(l);//将已经开辟的一些内存空间拿掉
printf("空间开辟失败");
exit(0);
}
printf("list elem空间开辟成功!\n");
l->length = 0;
l->size = LIST_INIT_SIZE;
return l;
}
void FreeList(LIST *l)
{
free(l->elem);
free(l);
printf("freeList executed!\n");
}
int InsertList(LIST *list,int position,ElemType *e)
{
ElemType *p = NULL,*q= NULL,*newElement;
if(list == NULL || e == NULL)
{
return 0;
}
if(position < 1 || position > list->length+1) //不能在第0位插入,不能大于已有的长度
{
return 0;
}
if(list->length >= list->size)
{
newElement = realloc(list->elem,(list->size+LIST_INCREME)*sizeof(ElemType));
if(newElement == NULL)
{
return 0;//开辟失败返回0,表示错误
}
list->elem = newElement;
list->size = list->size + LIST_INCREME;
return 1;
}
q = &list->elem[position-1];
for(p = &(list->elem[list->length-1]);p>=q;p--)
{
*(p+1) = *p; //将所有的东西搬过去,如果你插入在首地址,那么运算量会非常大!
}
*q = *e;
++ list->length;
printf("list's length is %d\n",list->length);
printf("list's size is %d\n",list->size);
return 1;
}
int DeleteList(LIST *l,int position)
{
ElemType *crtElemPtr = NULL,*lastcrtElemPtr = NULL;
if(l == NULL)
{
return 0;
}
if(position<1||position>l->length)
{
return 0;
}
crtElemPtr = &(l->elem[position-1]);
lastcrtElemPtr = &(l->elem[l->length - 1]);
for( ;crtElemPtr<=lastcrtElemPtr;crtElemPtr++){
*crtElemPtr = *(crtElemPtr+1);
}
l->length--;
return 1;
}
//====================main.c======================
#include <stdio.h>
#include "stu.h"
#include "list.h"
ElemType stu[4] = {{"s101","张三","男",100},{"s102","李四","女",75},{"s103","王五","男",90},{"s104","赵七","男",80}};
int main(void)
{
int i;
LIST * list1 = NULL;
list1 = InitLIST();
for (i=0;i<4;i++)
InsertList(list1,1,&stu[i]);
DeleteList(list1,1);
FreeList(list1);
return 0;
}