单向链表
解决顺序存储的缺点,插入和删除,动态存储问题。
动态存储,程序运行起来后,决定链表的容量。 内存的使用率 ,比较高。
线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。可以被存储在任意内存未被占用的位置上。
所以前面的顺序表只需要存储数据元素信息就可以了。在链式结构中还需要一个元素存储下一个元素的地址。
为了表示每个数据元素,ai与其直接后继数据元素ai+1之间的逻辑关系,对ai来说,除了存储其本身的信息外,还需要存一个指示器直接后续的信息。把存储元素信息的域叫数据域,把存储直接后继位置的域叫指针域。这两部分信息组成数据元素ai的存储映像,叫结点(Node); 节点
typedef struct person {
char name[32];
char sex;
int age;
int score;
}DATATYPE;
typedef struct node {
DATATYPE data;
struct node *next;
}LinkNode;
typedef struct list {
LinkNode *head;
int tlen;
int clen;
}LinkList;
LinkList *CreateLinkList(int len);
int InsertHeadLinkList(LinkList *list, DATATYPE *data);
int InsertTailLinkList(LinkList *list, DATATYPE* data);
int ShowLinkList(LinkList *list);
LinkNode *FindLinkList(LinkList *list, char *name);
int DeleteLinkList(LinkList *list, char *name);
int ModifyLinkList(LinkList *list, char *name, DATATYPE* data);
int DestroyLinkList(LinkList *list);
makefile
工程管理工具
应用:多文件编译,源文件可以在不同目录下,可以给gcc添加相关一些编译选项
优点:
第一次编译完毕后,makefile 会记录时间戳。 后期如果修改某个源文件,再次makefile的时候, 只会编译修改过的源文件,更新 obj(目标)或(a.out )
编写:
#目标:依赖
#Tab规则
# $^ makefile //内置变量 本条规则的依赖
#$@ makefile //内置变量 本条规则的目标
SRC = ./main.c
SRC+= ./linklist.c
# $(SRC) = ./main.c ./linklist.c
DST= demo
LIBS= -lm -lpthread
FLAGS = -g
$(DST):$(SRC)
gcc $^ -o $@ $(LIBS) $(FLAGS)
clean:
rm $(DST)
使用
make
使用make命令后,会在当前目录下查找Makefile或(makefile),并执行Makefile中的编译规则
make,执行Makefile的第一条规格
make clean 执行Makefile中目标名为clean这条规则
如果源文件,超过3个的话,就需要编写Makefile



