#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define DataType int
struct node
{
DataType data;
struct node* next;
};
typedef struct node* pnode;
void head_insert(pnode*,DataType);//头插法
void rear_insert(pnode*,pnode*,DataType);//尾插法
void show_list(pnode);//遍历链表
void delete(pnode*,DataType,DataType*);//删除元素
DataType* find(pnode,DataType);//查找元素
void mod(pnode,int,DataType);//修改值为key的元素
bool mod1(pnode,DataType,DataType);//修改第n个元素
void destory();//注销列表
void main()
{
pnode head=NULL;
pnode rear=NULL;
rear_insert(&head,&rear,1);
rear_insert(&head,&rear,2);
rear_insert(&head,&rear,3);
rear_insert(&head,&rear,4);
show_list(head);
DataType m;
delete(&head,3,&m);
show_list(head);
}
void head_insert(pnode* top,DataType data)
{
pnode newnode=(pnode)malloc(sizeof(struct node));//申请空间
if(NULL==newnode)
return;
newnode->data=data;//插入元素
newnode->next=*top;//改变指向
*top=newnode;
}
void rear_insert(pnode* top,pnode* last,DataType data)
{
pnode newnode=(pnode)malloc(sizeof(struct node));//申请空间
if(NULL==newnode)
return;
newnode->data=data;
if(NULL==*top)
*top=newnode;
else
(*last)->next=newnode;//注意优先级
*last=newnode;
}
void show_list(pnode top)
{
while(NULL!=top)
{
printf("%d ",top->data);
top=top->next;
}
putchar(10);//换行
}
DataType* find(pnode top,DataType key)
{
while(NULL!=top && top->data!=key)
top=top->next;
if(NULL==top)
{
printf("未找到\n");
return NULL;
}
else
{
printf("找到了\n");
return &(top->data);
}
}
bool mod1(pnode top,DataType key,DataType data)
{
DataType* tmp=find(top,key);
if(NULL==tmp)
return false;
else
*tmp=data;
return true;
}
void mod(pnode top,int pos,DataType data)
{
int i=1;
while(i!=pos)
{
i++;
top=top->next;
}
top->data=data;
}
void delete(pnode *top,DataType key,DataType* data)
{
pnode front,ploc;//找前驱节点
front=NULL;
ploc=*top;
while(NULL!=ploc && key!=ploc->data)
{
front=ploc;
ploc=ploc->next;//你追我赶
}
if(NULL==ploc)//下标超出
{
printf("没有找到要修改的元素\n");
return;
}
else if(ploc==*top)//删除的是头结点
{
*top=(*top)->next;
}
else//找到元素
{
front->next=ploc->next;
}
free(ploc);
}
单链表(增删改查)
最新推荐文章于 2024-09-29 15:26:10 发布