1.用头指针head(头指针)标示一个单链表,单链表中L表示头结点的地址,头结点的指针域指向第一个结点,头结点的数据域无意义,可存储结点的数量。(链栈不需要头结点)
2.判断链表为空 :head ->next = NULL ;
3.指向头结点的尾结点,循环链表
4.单链表逆置,头插法
5.链表的尾插:定义指针,且指针总是指向链表末尾
6.单链表特点:
1>逻辑关系相邻的元素在物理位置上可以不相邻
2>表中的元素只能顺序访问而不能随机访问
3>表的大小可以动态改变
4>插入删除等操作只需要修改指针而无需移动元素。
#include <stdio.h>
#include <stdlib.h>
#define TURE (1)
#define FALSE (0)
typedef unsigned char Boolean;
typedef struct List_node
{
int data;
struct List_node* next;
}List_node;
typedef List_node* List_head;
List_node * Malloc(int size)
{
List_node *result = (List_head)malloc(size);
if(result == NULL){
printf("memery is full.\n");
exit(1);
}
return result;
}
List_head init_list(void)
{
List_head lhead = NULL;
lhead = Malloc(sizeof(List_node));
lhead->data = 0;
lhead->next = NULL;
return lhead;
}
void disdory_list(List_head * phead)
{
List_node *p = NULL;
List_node *q = NULL;
if(phead == NULL || *phead == NULL)
{
return;
}
p = *phead;
while(p != NULL)
{
q = p;
p = p->next;
free(q);
}
*phead = NULL;
}
Boolean push_front(List_head head,int value)
{
List_node * node = NULL;
if(head == NULL)
{
return FALSE;
}
node = Malloc(sizeof(List_node));
node->data = value;
node->next = head->next;
head->next = node;
head->data++;
return TURE;
}
void print_List(List_head head)
{
List_node *p = NULL;
for( p = head->next; p !=