单链表的创建,删除,插入以及打印。

今天新学到了单链表的创建,打印,删除以及插入,自己感觉可以写下来纪念一下,是不是拿出来理解理解,还是很有好处的。大笑


#include "stdio.h"
#include <malloc.h>


struct student
{
long num;
float score;
struct student * next;
};


int n=0;


//创建链表
struct student * create(void)
{
struct student * head;
struct student * p;
struct student * tail;


head=NULL;


p=(struct student *)malloc(sizeof(struct student));
scanf("%ld %f", &p->num, &p->score);


while(p->num != 0)
{
if(head==NULL)
head=p;
else
tail->next=p;


tail=p;


n++;


p=(struct student *)malloc(sizeof(struct student));
scanf("%ld %f", &p->num, &p->score);
}


tail->next=NULL;


return head;
}


//打印链表
void print(struct student * head)
{
struct student * p=head;
while(p != NULL)
{
printf("node[num=%ld,score=%f]\n", p->num, p->score);
p=p->next;

}


//删除链表中某个指定的节点(包括数据)
struct student * del(struct student * head, long num)
{
struct student * p1, * p2;


if(head == NULL)
{
return head;
}
else
{
p1=head;
p2=NULL;
while(p1 != NULL &&p1->num != num )
{
p2=p1;
p1=p1->next;
}
if(p1!=NULL)
{
if(p1 == head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
}

}


return head;
}


//插入新节点
struct student *insert(struct student *head,long num,float score)
{
struct student *p=(struct student *)malloc(sizeof(struct student));
p->num=num;
p->score=score;


if(head==NULL)
{
head=p;
p->next=NULL;
}
else
{
//头插法
p->next=head;
head=p;

}
return head;
}


int main(int argc, char* argv[])
{
struct student * head=create();


printf("before delete\n");
print(head);


head=del(head, 1);
printf("after delete\n");
print(head);

printf("after insert\n");
head=insert(head,5,3.6);
print(head);
return 0;
}








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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值