一、定义
链表是一种常用的数据结构,而且我后面栈和FIFO也是用链表结构实现的,所以你必须得对
链表非常熟悉。它的查找时间复杂度为O(n),而它的插入复杂度为O(1),所以当你的数据不
断的变化时这时候用链表是非常好的。
二、使用
typedef int SeqType;
typedef struct Node//定义数据节点
{
SeqType data;
struct Node *next;
}Node;
typedef struct Header//定义顺序表头
{
int length ;
Node *p;
}Header;
Header *Creat_List()
{
Header *header = (Header *)malloc(sizeof(Header));
header->length = 0;//初始化链表长度
header->p = NULL;//初始化链表指针
return header;
}
bool Insert_List(Header *header,Node *node,int pos)//找到指定位置插入数据
{
Node *current = NULL;
current = (Node *)header;
if(pos>header->length||pos<0)
{
printf("illegal pos");
return false;
}
if(header->p == NULL)
{
header->p = node ;
node->next = NULL;
header->length ++;
return true;
}
for(int i=0;i<pos;i++)
{
current = current->next ;
}
node->next = current->next ;
current->next = node;
header->length ++;
return true;
}
bool Delete_List(Header *header,int pos)//删除指定位置的元素
{
Node *current = NULL;
Node *tem = NULL;
current = (Node *)header;
if(pos>header->length||pos<0)
{
printf("请输入合法的pos值");
return false;
}
if(header->length == 0)
{
printf("这个链表是空的");
return true;
}
for (int i = 0;i<pos;i++)
{
current=current->next ;
}
tem = current->next;
current->next = current->next->next ;
free(tem);
header->length --;
return true;
}
bool Destory_List(Header *header)//摧毁链表 保留头节点
{
Node *current = NULL;
current = header->p;
Node *tem = NULL;
if(header->p = NULL)
{
printf("这个链表本来就是空的,不需要摧毁");
}
while(current)
{
tem = current;
current=current->next;
free(tem);
header->length--;
}
}
int main()//在此头节点不算数据节点
{
Header *header;
header = Creat_List();
Node *a=(Node *)malloc(sizeof(Node));
a->data = 1;
Node *b=(Node *)malloc(sizeof(Node));
b->data = 2;
Node *c=(Node *)malloc(sizeof(Node));
c->data = 3;
Insert_List(header,a,0);
printf("%d\n",header->p->data);
Insert_List(header,b,0);
printf("%d\n",header->p->data);
Insert_List(header,c,0);
printf("%d\n",header->p->data);
Delete_List(header,0);
printf("%d\n",header->p->data);
Destory_List(header);//销毁链表
printf("%d",header->length);
}
欢迎各位指出不足之处