/*简单的单链表*/
#include <stdio.h>
//链表的数据结构
typedef struct list{
int data;
struct list* next;
}list_t;//别名
int main(void)
{
//造四个数据
list_t node1 = {10, NULL};
list_t node2 = {20, NULL};
list_t node3 = {30, NULL};
list_t node4 = {40, NULL};
//初始化头尾
list_t head = {0};
list_t tall = {0};
//连接数据,形成链式
head.next = &node1;
node1.next = &node2;
node2.next = &node3;
node3.next = &node4;
node4.next = &tall;
//造遍历用的数据
list_t* p_node = NULL;
for(p_node = &head; p_node != &tall; p_node = p_node -> next){
list_t* p_first = p_node;
list_t* p_mid = p_first -> next;
list_t* p_last = p_mid -> next;
if(p_mid != &tall){
printf(" %d", p_mid -> data);
}
}
//以上遍历打印存放在stdout里面,并未显示到屏幕上,
//下面+\n可以把存放在stdout里面的数据打印到屏幕上
printf("\n");
/*插入一个数据*/
//造需要插入的数据
list_t insert = {25, NULL};
//遍历
for(p_node = &head; p_node != &tall; p_node = p_node -> next){
list_t* p_first = p_node;
list_t* p_mid = p_first -> next;
list_t* p_last = p_mid -> next;
//顺序插入
if(p_mid -> data > insert.data){
p_first -> next = &insert;
insert.next = p_mid;
break;
}
}
//遍历
for(p_node = &head; p_node != &tall; p_node = p_node -> next){
list_t* p_first = p_node;
list_t* p_mid = p_first -> next;
list_t* p_last = p_mid -> next;
if(p_mid != &tall){
printf(" %d", p_mid -> data);
}
}
printf("\n");
/*删除一个数据*/
for(p_node = &head; p_node != &tall; p_node = p_node -> next){
list_t* p_first = p_node;
list_t* p_mid = p_first -> next;
list_t* p_last = p_mid -> next;
//匹配删除的数据
if(25 == p_mid -> data){
p_first -> next = p_mid -> next;
break;
}
}
//遍历
for(p_node = &head; p_node != &tall; p_node = p_node -> next){
list_t* p_first = p_node;
list_t* p_mid = p_first -> next;
list_t* p_last = p_mid -> next;
if(p_mid != &tall){
printf(" %d", p_mid -> data);
}
}
printf("\n");
return 0;
}