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

来源:互联网 发布:淘宝新店铺如何做活 编辑:程序博客网 时间:2024/06/05 04:36

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


#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