学习完链表整理思路后的一个代码实现,只是对基本的增删改查进行实验。(代码小白)
如有错误在评论区指出,会及时进行修改
在这里插入代码片
#include<stdio.h>
#include<stdlib.h>
#define true 1
#define false 0
typedef struct Node{
int data;
struct Node *next;
}Node;
void createlist(Node *head,int size); //创建
void addpoint(Node *head,int value);//增
int findpoint(Node *head,int value);//查(有返回值)
void modifyprint(Node *head,int position,int value);//修改
void printlist(Node *head);//打印
void deletepoint(Node *head,int position);//删
void insertpoint(Node *head);//插入
void deletelist(Node *head);//全删
int main()
{
Node *head=(Node*)malloc(sizeof(Node));
head->data=0;
head->next=NULL;
int size;
printf("创建大小:");
scanf("%d",&size);
int value,position;
createlist(head,size);
printlist(head);
printf("末尾增加的:");
scanf("%d",&value);
addpoint(head,value);
printlist(head);
printf("要删除的位置:");
scanf("%d",&position);
deletepoint(head,position);
printlist(head);
printf("要修改的位置及元素");
scanf("%d %d",&position,&value);
modifyprint(head,position,value);
printlist(head);
insertpoint(head);
printlist(head);
printf("查找:",value);
scanf("%d",&value);
printf("%d在第%d位",value,findpoint(head,value));
deletelist(head);
}
void createlist(Node *head,int size)
{
Node *m=head;
for(int i=1;i<=size;i++)
{
printf("输入第%d值:\n",i);
Node *point=(Node*)malloc(sizeof(Node));//创建输入位置
scanf("%d",&point->data);//point->next指向m的下一个节点
point->next=NULL;//一直循环使输入值下一个一直是空
m->next=point;
m=point; //把point的值给m
}
}
void printlist(Node *head)
{
Node *m=head->next;
while(m!=NULL)
{
printf("%d",m->data);
m=m->next;
}
printf("\n");
}
void addpoint(Node *head,int value)
{
Node *m=head->next;
Node *point=(Node*)malloc(sizeof(Node));
point->data=value;//创造你要加啥
point->next=NULL;//保持空
while(m->next!=NULL){
m=m->next;
}//找尾部
m->next=point;//尾部的下一个就是输入
}
int findpoint(Node *head,int value)
{
Node *middle=head->next;
int i=1;
int o=0;
while(middle!=NULL)
{
if(middle->data==value)
{
o=i;
break;
}
middle=middle->next;
i++;
}
return o;
}
void modifyprint(Node *head,int position,int value)
{
int i=1;
Node *m=head->next;
while(m!=NULL&&i!=position)
{
m=m->next;
i++;
}
if(m!=NULL)//超出长度
{
m->data=value;
}
}
void deletepoint(Node *head,int position)
{
int i=1;
Node *left=head;
Node *right=left->next;
while(right!=NULL&&i!=position)
{
right=right->next;
left=left->next;
i++;
}
if(right!=NULL)
{
left->next=right->next;
free(right);
right=NULL;
}
}
void insertpoint(Node *head)
{
printlist(head);
int value,position;
printf("插入位置:");
scanf("%d",&position);
printf("插入的值:");
scanf("%d",&value);
Node *left=head;
Node *right=left->next;
Node *point=(Node*)malloc(sizeof(Node));
point->data=value;
point->next=NULL;
int i=1;
while(i!=position&&right!=NULL)
{
right=right->next;
left=left->next;
i++;
}
left->next=point;
point->next=right;
}
void deletelist(Node *head)
{
Node *m=head->next;
Node *point=head->next;
while(m!=NULL){
point=m;//先把m给point,m继续遍历下去,把point释放掉
m=m->next;
free(point);
point=NULL;
}
head=NULL;
}
代码实现结果(随便输的,不具有参考性)