这里是记录一下自己的学习过程
完整代码在我的 gitee 仓库中
第一章
第二章
1 线性表
1.1 数组(顺序表)
1.2 链表
(1)定义节点
//定义结点类型
typedef struct Node {
int data; //数据类型,你可以把int型的data换成任意数据类型,包括结构体struct等复合类型
struct Node* next; //单链表的指针域
} Node, * LinkedList;
(2) 初始化
//单链表的初始化
LinkedList LinkedListInit() {
Node* L;
L = (Node*)malloc(sizeof(Node)); //申请结点空间
if (L == NULL) { //判断申请空间是否失败
exit(0); //如果失败则退出程序
}
return L;
}
(3) 创建链表
头插法
//单链表的建立1,头插法建立单链表
LinkedList LinkedListCreatH() {
Node* L;
L = (Node*)malloc(sizeof(Node)); //申请头结点空间
L->next = NULL; //初始化一个空链表
int x; //x为链表数据域中的数据
printf("头插法建立链表\n");
printf("请输入:");
while (scanf("%d", &x) != EOF) {
Node* p;
p = (Node*)malloc(sizeof(Node)); //申请新的结点
p->data = x; //结点数据域赋值
p->next = L->next; //将结点插入到表头L-->|2|-->|1|-->NULL
L->next = p;
printf("请输入:");
}
return L;
}
尾插法
//尾插法建立链表
LinkedList LinkedListCreatE() {
LinkedList L;
L = LinkedListInit();
LinkedList r = L;
int x;
printf("尾插法建立链表\n");
printf("请输入:");
while (scanf("%d",&x) != EOF)
{
Node* p;
p = LinkedListInit();
p->data = x;
p->next = NULL;
r->next = p;
r = p;
printf("请输入:");
}
return L;
}
(4)遍历
//遍历链表
void LinkedListErgodic(LinkedList L) {
LinkedList p;
p = L;
int i = 1;
printf("开始遍历链表--------------------\n");
while (p->next != NULL) {
printf("第%d个链表数据为: %d \n",i, p->next->data);
p = p->next;
i++;
};
return;
}
(5) 插入
/*
L 插入的链表
local 插入的位置(下标,从0开始)
data_n 插入的数据
retune 指向插入元素的结点指针
*/
Node* LinkedListInster(LinkedList L, int local,int data_n) {
printf("开始插入--------------------\n");
Node* r = L;
int i = 0;
//printf("插入\n");
//printf("位置%d\n",local);
//printf("数据%d\n",data_n);
while (i <local)
{
r = r->next;
i++;
}
Node* p = LinkedListInit();
p->data = data_n;
p->next = r->next;
r->next = p;
return p;
}
(6) 删除
/*
L 操作的链表
local 删除插入的位置(下标,从0开始)
retune 链表
删除方法:按照下标进行删除(按位置删除的没写)
*/
Node* LinkedListDelete(LinkedList L, int local){
printf("开始删除--------------------\n");
int i = 0;
Node* pre;
Node* p;
pre = L;
while (i < local)
{
pre = pre->next;
i++;
}
p = pre->next;
//printf("pre数据: %d", pre->data);
//printf("p数据: %d", p->data);
pre->next = p->next;
p->next = NULL;
free(p);
return L;
}