//头插法
typedef struct node //声明结构体 名为node
{
int data;//里面存了int类型4个字节
struct node *next; //有2个字节给了指针
}Node;//这里可以重命名结构体名
Node* createLinkByHead()//创建一个单链条
{
Node *head=NULL,*p=NULL;//head为头节点 p为游动的指针
int m;
scanf("%d",&m);//这两步为设置 输入数据的 结束标志
while (m>0)
{
p=(Node *)malloc(sizeof(Node)) //向系统申请一个与Node字节相同的空间给p
p->data=m;// ->为指向 p->data 可以表示data里的数据 p首先指向data
p->next=NULL;// 然后指向了next指针 并且这个指针不指向任何数据
if(head == NULL) head=p;//这里就和最后一个数据有关了 最后一个数据的next为NULL
else
{
p->next=head;
head=p;
}
scanf("%d",&m);
}
return head;//因为是单链条 所以知道头节点指的数据就可以全部都找出来
}
————————————————————————————————————————
//尾插法
typedef struct Node//定义类型
{
int data;//Node类型中含有两个变量 一个是数据域 一个是指针域
struct Node *next;
}Node;//重命名
Node *createlist()
{
Node *head=NULL,*tail=NULL;//定义头指针和尾指针 他们都有一个数据域和一个指针域
int n;
printf("输入SIGN:");//给输入元素的程序指定一个标志 当n=0时结束输入元素
scanf("%d",&n);
while(n>0)
{
Node *new_node=(Node*)malloc(sizeof(Node));//向系统申请一个与Node一样大的空间给new_node
new_node->data=n;//这两布就是给new_node赋值 new_node的数据域赋值n
new_node->next=NULL;//new_node的指针域赋值为NULL 因为每次都要重新设置新元素 而新元素的指针域要指向下一个元素的数据域
if(head==NULL)
{
head=new_node;//如果头指针为NULL 那么头指针和尾指针都为new_node
//这个等号的意思就是覆盖 把new_node的所有属性都给head和tail 相当于把head和tail都更新了
tail=new_node;
}
else
{
tail->next=new_node;//尾指针的next指针指向new_node节点 达到将new_node插入到链条的尾部
tail=new_node;//将new_node的所有属性覆盖掉尾指针的所有属性
}
printf("读入元素:");//这两步就是重新输入元素
scanf("%d",&n);
}
return head;//单链条返回头部 就可以把所有的元素一一对应出来
}