#define ElemType int
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}Lnode,*List;
void Init_L(List &L)
{
L=(List)malloc(sizeof (Lnode)*1);
L->next=NULL;
}
//头插法
void Create_Head_List(List &L)
{
List q=L;
ElemType e;
scanf("%d",&e);
while (e!=999)
{
List p=(List)malloc(sizeof (Lnode)*1);
p->next=q->next;
q->next=p;
p->data=e;
scanf("%d",&e);
}
}
//尾插法
void Create_tail_List(List &L)
{
List q=L;
ElemType e;
scanf("%d",&e);
while (e!=999)
{
List p=(List)malloc(sizeof (Lnode)*1);
q->next=p;
q=p;
p->data=e;
scanf("%d",&e);
}
}
//指定位置增加某个元素
void Insert_e(List &L,ElemType e,int pos)
{
List newp=(List)malloc(sizeof (Lnode)*1);
int i=0;
List p=L;
//移动到pos前面一个
while (p)
{
i++;
if(i==pos)
{
break;
}
p=p->next;
}
if(!p)
{
printf("insert failed");
return;
}
newp->next=p->next;
p->next=newp;
newp->data=e;
}
//删除某个元素
void Delete_e(List &L,ElemType e)
{
List p,q=L;
//找到删除结点的直接前驱 这里的条件顺序固定
while (q->next&&q->next->data!=e)
{
q=q->next;
}
if(!q->next)
{
printf("Don't find del_key\n");
return;
}
p=q->next;
q->next=q->next->next;
free(p);
}
//删除第pos的元素
void Delete_pos(List &L,int pos)
{
List p,q=L;
int i=0;
//找到删除结点的直接前驱 这里的条件顺序固定
while (q)
{
i++;
if(i==pos)
{
break;
}
q=q->next;
}
if(!q)
{
printf("Don't find del_pos\n");
return;
}
p=q->next;
q->next=q->next->next;
free(p);
}
void Print(List L)
{
L=L->next;
while (L)
{
printf("%d ",L->data);
L=L->next;
}
printf("\n");
}
单链表动态存储的增删查改
最新推荐文章于 2025-11-20 20:01:48 发布
341

被折叠的 条评论
为什么被折叠?



