链表:C版单链表代码

//c版单链表
//主要知识点:结构体struct,指针,动态内存分配malloc,free,
//主要功能:链表的增,删,查,改
//
//
//..............................................................头文件
#include<stdio.h>
#include<stdlib.h>


typedef struct Noder
{
int data;
char str[20];
struct Noder *next;
}Node;


Node *head;
Node *tail;


void h_insert();//头插法,新节点插在头前面作新头
void t_insert();//尾插法,新节点插在尾后,
void f_insert();//前插法,插在指定节点前(靠近头),若为空,作头,若不存在,插最后
void l_insert();//后插法,插在指点节点后(靠近尾),若尾空,作头,若不存在,插最前作新头
void del();
void show();
void chg();


void h_insert()
{
Node *pnew=(Node*)malloc(sizeof(Node));
if(!pnew)
{
printf("申请空间失败!\n");
return;
}
printf("输入data,str:");
scanf("%d%s",&(pnew->data),pnew->str);
int bdata=0;
pnew->next=head;
head=pnew;
printf("插入节点成功!\n");
}


void t_insert()
{
Node *pnew=(Node*)malloc(sizeof(Node));
if(!pnew)
{
printf("申请空间失败!\n");
return;
}
printf("输入data,str:");
scanf("%d%s",&(pnew->data),pnew->str);
int bdata=0;
if(!head)
{
head=tail=pnew;
pnew->next=NULL;
}
else
{
tail->next=pnew;
pnew->next=NULL;
tail=pnew;
}
printf("插入节点成功!");
}


void f_insert()
{
Node *pnew=(Node*)malloc(sizeof(Node));
Node *fch=head,*lch=NULL;
if(!pnew)
{
printf("申请空间失败!\n");
return;
}
printf("输入data,str:");
scanf("%d%s",&(pnew->data),pnew->str);
if(!head)
{
head=tail=pnew;
pnew->next=NULL;
printf("链表为空,已作头节点插入!\n");
return;
}
int bdata=0;
printf("输入标准节点的data:");
scanf("%d",&bdata);
while(fch)
{
if(fch->data==bdata)
{
if(fch==head)
{
pnew->next=head;
head=pnew;
break;
}
else
{
lch->next=pnew;
pnew->next=fch;
break;
}
}
lch=fch;
fch=fch->next;
}
if(fch)
printf("插入节点成功!\n");
else
{
tail->next=pnew;
pnew->next=NULL;
tail=pnew;
printf("标准节点不存在,插入最后!\n");
}
}




void l_insert()
{
Node *pnew=(Node*)malloc(sizeof(Node));
Node *pch=head;
if(!pnew)
{
printf("申请空间失败!\n");
return;
}
printf("输入data,str:");
scanf("%d%s",&(pnew->data),pnew->str);
if(!head)
{
head=tail=pnew;
pnew->next=NULL;
printf("链表为空,已作头结点插入!\n");
return;
}
int bdata=0;
printf("输入标准节点data:");
scanf("%d",&bdata);
while(pch)
{
if(pch->data==bdata)
{
pnew->next=pch->next;
pch->next=pnew;
break;
}
pch=pch->next;
}
if(!pch)
{
pnew->next=head;
head=pnew;
printf("标准节点不存在,已插入最前,作新头! \n");
}
else
printf("插入节点成功!\n");
}




void del()
{
Node *fch=head,*lch=NULL;
if(!head)
{
printf("链表为空!\n");
return;
}
int bdata=0;
printf("输入要删除节点data:");
scanf("%d",&bdata);
while(fch)
{
if(fch->data==bdata)
{
if(fch==head)
head=head->next;
else
lch->next=fch->next;
free(fch);
printf("删除节点成功!\n");
break;
}
lch=fch;
fch=fch->next;
}
if(!fch)
printf("要删除节点不存在!\n");
}




void show()
{
Node *pch=head;
if(!head)
{
printf("链表为空!\n");
return;
}
while(pch)
{
printf("%d\t%s\n",pch->data,pch->str);
pch=pch->next;
}
}




void chg()
{
Node *pch=head;
if(!head)
{
printf("链表为空!\n");
return;
}
int cdata;
printf("输入要修改节点data:");
scanf("%d",&cdata);
while(pch)
{
if(pch->data==cdata)
{
printf("输入新的data,str:");
scanf("%d%s",&(pch->data),pch->str);
break;
}
pch=pch->next;
}
if(!pch)
printf("要修改的节点不存在!\n");
else
printf("修改成功!\n");
}


void get_char()
{
printf("Enter键继续...\n");
while(getchar()!='\n');
getchar();
}






int main()
{
char ch1='y';
while(ch1=='y')
{
system("clear");
printf("1.插入\t2.删除\n3.遍历\t4.修改\n0.退出\n");
int i1;
printf("选择:");
scanf("%d",&i1);
switch(i1)
{
case 1:
{
char ch2='y';
while(ch2=='y')
{
system("clear");
printf("1.头插法\t2.尾插法\n3.前插法\t4.后插法\n0.反回\n");
int i2;
printf("选择:");
scanf("%d",&i2);
switch(i2)
{
case 1:{h_insert();get_char();}break;
case 2:{t_insert();get_char();}break;
case 3:{f_insert();get_char();}break;
case 4:{l_insert();get_char();}break;
case 0:ch2='n';break;
default:{printf("输入有误,请重新输入!\n");get_char();}break;
}
}
}break;
case 2:{del();get_char();}break;
case 3:{show();get_char();}break;
case 4:{chg();get_char();}break;
case 0:ch1='n';break;
default:{printf("输入有误,请重新输入!\n");get_char();}break;
}
}


return 0;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值