//线性表注意:线性表操作过程中改主意list的变化,执行一个操作都要返回一个list,难点就是创建过程中r接受前一个节点的地址,删除过程难点先找到数据对应的节点,是p1->link=p2->link;
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node*link;
}Lnode,*LinkList;
LinkList Creat(int n)//创建线性表,我们主要是通过结构体指针来操作创建的,需要注意的是结构体指针本来就是对应一个地址,如p是他自己的地址。
{
LinkList list,r,p;
int i;
list = NULL;
r = NULL;
p = NULL;
for (i = 1; i<= n; i++)
{
p = (LinkList)malloc(sizeof(Lnode)); //申请一个空间给每一个节点(用节点指针),创建一个NODE节点还同时创建了一个结构体指针,造成了资源的浪费
p->data = i;
p->link=NULL;
if (list == NULL) //对于第一个节点赋予List指针
{
list = p;
}
else
{
r->link = p; //将前一个节点赋予r指针
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node*link;
}Lnode,*LinkList;
LinkList Creat(int n)//创建线性表,我们主要是通过结构体指针来操作创建的,需要注意的是结构体指针本来就是对应一个地址,如p是他自己的地址。
{
LinkList list,r,p;
int i;
list = NULL;
r = NULL;
p = NULL;
for (i = 1; i<= n; i++)
{
p = (LinkList)malloc(sizeof(Lnode)); //申请一个空间给每一个节点(用节点指针),创建一个NODE节点还同时创建了一个结构体指针,造成了资源的浪费
p->data = i;
p->link=NULL;
if (list == NULL) //对于第一个节点赋予List指针
{
list = p;
}
else
{
r->link = p; //将前一个节点赋予r指针
}
r = p;
}
return list; //返回List
}
LinkList delete(LinkList list,int i) //删除其中的某个元素,这里是通过对应数值删除,通过p和p->link及(p->link)->link
{
LinkList p1,p2;
p1=list;
while(i!=p1->data&&p1->link!=NULL)//不是我们所要找的数值时??
{
p2=p1;
p1=p1->link;//p1指向下一节点
}
if(i==p1->data)//当找到要删除的num时
{
if(p1==list)//要删除的数值为第一个数时
list=p1->link;
else p2->link=p1->link;//否则的话,将下一结点地址赋给前一结点(即跳过num,指向下一个数值)??
}
return(list);
r = p;
}
return list; //返回List
}
LinkList delete(LinkList list,int i) //删除其中的某个元素,这里是通过对应数值删除,通过p和p->link及(p->link)->link
{
LinkList p1,p2;
p1=list;
while(i!=p1->data&&p1->link!=NULL)//不是我们所要找的数值时??
{
p2=p1;
p1=p1->link;//p1指向下一节点
}
if(i==p1->data)//当找到要删除的num时
{
if(p1==list)//要删除的数值为第一个数时
list=p1->link;
else p2->link=p1->link;//否则的话,将下一结点地址赋给前一结点(即跳过num,指向下一个数值)??
}
return(list);
}
int main()
{
LinkList s,k,r;
int i,l;
for (s = Creat(10); s != NULL; s = s->link)
{
printf("%d", s->data);
}
printf("请输入您要删除的元素:");
scanf("%d",&i);
k=Creat(10);
r=delete(k,i);
for (; r!= NULL; r=r->link)
{
printf("%d", r->data);
}
return 0;
}
int main()
{
LinkList s,k,r;
int i,l;
for (s = Creat(10); s != NULL; s = s->link)
{
printf("%d", s->data);
}
printf("请输入您要删除的元素:");
scanf("%d",&i);
k=Creat(10);
r=delete(k,i);
for (; r!= NULL; r=r->link)
{
printf("%d", r->data);
}
return 0;
}