嵌入式学习第七天
1、链式存储相较于顺序存储优势:(1)内存连续性要求没那么高。(2)插入或者删除不用大量 移位操作。
2、
3、
4、
link list_get_wz(link q,int i)
{
link p;
p = q;
int j=0;
if (p == NULL)
{
printf("This is phty\n");
}
if (i == 0)
{
return p;
}
while (p->next != NULL)
{
p = p->next;
j++;
if (j==i)
{
return p;
}
}
return NULL;
}
5、
int list_inseart(link p, int w, int sum)
{
link q,b;
q = list_get_wz(p, w - 1);
if (q == NULL)
{
printf("input full\n");
return -1;
}
b = (link)malloc(sizeof(sqlink));
b->a = sum;
b->next = q->next;
q->next = b;
return 0;
}
6、
int list_delate(link p,int w)
{
link q,b;
if (w < 1)
{
printf("input errol\n");
return 0;
}
q = list_get_wz(p,w-1);
if (q == NULL)
{
printf("input errol\n");
return 0;
}
b = q->next;
q->next = q->next->next;
free(b);
}
8、main.c
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "list.h"
int main()
{
link p,q;
p = list_creat();
list_insert_jd(p, 10);
list_insert_jd(p, 20);
list_insert_jd(p, 240);
list_insert_jd(p, 40);
p = list_free(p);
list_printf(p);
return 0;
}
list.c
#include "list.h"
#include "stdlib.h"
#include "string.h"
#include "stdio.h"
link list_creat()
{
link p;
p = (link)malloc(sizeof(sqlink));
p->a = 0;
p->next = NULL;
return p;
}
int list_insert_jd(link q,int num)
{
link p;
p = (link)malloc(sizeof(sqlink));
p->next = NULL;
p->a = num;
while (q->next != NULL)
{
q = q->next;
}
q->next = p;
return 0;
}
void list_printf(link p)
{
if (p->next == NULL)
{
printf("This is phty");
}
while (p->next != NULL)
{
p = p->next;
printf("%d ",p->a);
}
}
link list_get_num(link p, int num)
{
link q;
q = p;
if (p == NULL)
{
printf("This is phty\n");
}
while (q->next != NULL)
{
q = q->next;
if (q->a == num)
{
return q;
}
}
return NULL;
}
link list_get_wz(link q,int i)
{
link p;
p = q;
int j=0;
if (p == NULL)
{
printf("This is phty\n");
}
if (i == 0)
{
return p;
}
while (p->next != NULL)
{
p = p->next;
j++;
if (j==i)
{
return p;
}
}
return NULL;
}
int list_inseart(link p, int w, int sum)
{
link q,b;
q = list_get_wz(p, w - 1);
if (q == NULL)
{
printf("input full\n");
return -1;
}
b = (link)malloc(sizeof(sqlink));
b->a = sum;
b->next = q->next;
q->next = b;
return 0;
}
int list_delate(link p,int w)
{
link q,b;
if (w < 1)
{
printf("input errol\n");
return 0;
}
q = list_get_wz(p,w-1);
if (q == NULL)
{
printf("input errol\n");
return 0;
}
b = q->next;
q->next = q->next->next;
free(b);
b = NULL;
}
link list_free(link p)
{
link q;
q = p;
int j = 0;
if (p == NULL)
{
printf("list is phty");
return 0;
}
while (p != NULL)
{
q = p;
p=p->next;
free(q);
}
return NULL;
}
list.h
#ifndef __LIST_H
#define __LIST_H
#include "stdio.h"
typedef struct nod{
int a;
struct nod *next;
} sqlink, * link;
link list_creat();
void free_list(link p);
int list_insert_jd(link q, int num);
void list_printf(link p);
int list_delate(link p,int w); //删除链表某一元素
link list_get_num(link p,int num);//查找某一个数据元素
link list_get_wz(link p, int num);
int list_inseart(link p,int w,int sum); //在链表某一个位置插入
link list_free(link p); //链表释放
#endif
9、链表的释放
此图后面 H=NULL;没用因为改的是形参,要在定义他的地方改才行。函数改变main函数的指针可以用二级指针,也可用返回值。
10、链表按元素大小顺序合并