//这是一份关于头结点链表的问题
//完成一些基本的链表处理函数,包括插入,查找,删除,输出等一些功能的实现
#include<stdio.h>
#include<stdlib.h>
#include"linklist.h"
Node *Creat_List()
{
Node *list=(Node *)malloc(sizeof(Node)/sizeof(char));
if(list==NULL)
return NULL;
list->next==NULL;
return list;
}
//尾插法
int Insert_Last(Node *head,LinkData data)
{
if(head==NULL)
return false;
Node *node=(Node *)malloc(sizeof(Node)/sizeof(char));
if(node==NULL)
return fasle;
node->data=data;
head->next=node->data;
node->next==NULL;
return true;
}
//头插法
int Insert_Head(Node *head,LinkData data)
{
if(head==NULL)
return false;
Node *node=(Node *)malloc(sizeof(Node)sizeof(char));
if(node==NULL)
return false;
node->data=data;
node->next=head->next;
head->next=node;
return true;
}
//在pos处插入数据
int Insert_Pos(Node *head,int pos,LinkData data)
{
if(head==NULL||head<1)
return false;
//着要插入位置的前一个结点
Node *tmp=head;
int i;
for(i=0;i<pos-1;i++)
{
if(tmp==NULL)
break;
tmp=tmp->next;
}
if(tmp==NULL)
{
return false;
printf("要插入位置越界\n");
}
Node *node=(Node *)malloc(sizeof(Node)/sizeof(char));
if(node==NULL)
return false;
node->data=data;
node->next=tmp->next;
tmp->next=node;
return true;
}
//删除结点
int Delete_pos(Node *head,int pos)
{
if(head==NULL)
return false;
//找到要删除的前一个位置
Node *tmp=head;
int i;
for(i=0;i<pos-1;i++)
{
if(tmp==NULL)
break;
tm==tmp->next;
}
Node *p=tmp->next;
tmp->next=p->next;
free(p);
}
// 逆序
int Reverse_List(Node *head)
{
if(head==NULL||head->next==NULL||head->next->next==NULL)
return false;
Node *tmp=head;
Node *pre=head->next;
Node *cur=head->next->next;
while(cur)
{
tmp=cur->next;
cur->next=pre;
pre=cur;
cur=tmp;
}
head->next->next==NULL;
head->next=pre;
return true;
}
int Delete_Data(Node *head,LinkData data)
{
if (head == NULL)
return FALSE;
Node *tmp=head;
while(tmp->next)
{
if(tmp->next->data==data)
break;
tmp=tmp->next;
}
if(tmp->next==NULL)
return false;
Node *p=tmp->next;
tmp->next=p->next;
free(p);
return true;
}
int Find_Element(Node *head,LinkData data,int *x)
{
if (head == NULL)
return FALSE;
Node *tmp=head->next;
int k=1;
while(tmp)
{
if(tmp->data==data)
{
*x=k;
return false;
}
k++;
tmp=tmp->next;
}
return true;
}
int Get_Element(Node *head,int pos,int *x)
{
if(head==NULL||pos<1)
return false;
int i;
Node *tmp=head;
for(i=0;i<pos;i++)
{
if(tmp==NULL)
break;
tmp=tmp->next;
}
if(tmp==NULL)
{
return false;
}
else
*x=tmp->data;
return true;
}
int Get_Len(Node *head)
{
if(head==NULL)
return false;
Node *tmp=head;
int count =0;
while(tmp->next)
{
count++;
tmp=tmp->next;
}
return count;
}
int Clean_List(Node *head);
{
if(head==NULL)
return false;
Node *tmp=head;
while(tmp)
{
Delete_pos(head,1);
tmp=tmp->next;
}
return false;
}
void Display(Node *head)
{
if(head==NULL)
return false;
int count=0;
Node *tmp=head;
while(tmp)
{
if(count++%4==0)
{
printf("\n");
}
printf("%4d",tmp->data);
tmp=tmp->next;
}
}
int Destroy(Node *head)
{
if(head==NULL)
return false;
Clean_List(h);
free(h);
return false;
}