c语言动态链表建立的步骤,c语言动态链表的创建和插入

本文介绍了使用C语言实现的学生信息管理程序,包括创建链表结构、插入记录、删除指定数目的学生和打印链表内容。重点展示了如何利用`struct student`定义数据结构,并通过函数`creat()`, `del()`, `insert()`和`print()`进行操作。
摘要由CSDN通过智能技术生成

#include

#include

#define LEN sizeof(struct student)

struct student

{

long num;

float score;

struct student *next;

};

int n;

int main()

{

struct student* creat();

//struct student* del(struct student* head, long);

struct student* insert(struct student*, struct student *);

void print(struct student*);

struct student*head, stu;

//long del_num;

printf("input records:\n");

head = creat();

print(head);

//printf("input the deleted number:\n");

//scanf("%d",&del_num);

//head = del(head,&del_num);

//head = del(head, del_num);

//print(head);

printf("input the inserted record:\n");

scanf("%d %f",&stu.num,&stu.score);

head = insert(head, &stu);

print(head);

return 0;

}

struct student *creat()

{

struct student *head;

struct student *p1, *p2;

n = 0;

p1 = p2= (struct student*)malloc(LEN);

//p2 = (struct student*)malloc(LEN);

scanf("%d %f", &p1->num, &p1->score);

head = NULL;

while (p1->num != 0)

{

n = n + 1;

if (n == 1) head = p1;

else p2->next = p1;

p2 = p1;

p1 = (struct student *)malloc(LEN);

scanf("%d %f", &p1->num, &p1->score);

}

p2->next = NULL;

return(head);

}

//struct student *del(struct student*head, long num)

//{

// struct student *p1, *p2;

// if (head == NULL)

// {

//  printf("\nlist null!\n");

//  return(head);

// }

// p1 = head;

// while (num!=p1->num&&p1->next != NULL)

// {

//  p2 = p1;

//  p1 = p1->next;

// }

// if (num == p1->num)

// {

//  if (p1 == head) head = p1 ->next;

//  else p2->next = p1->next;

//  printf("delete:%d\n", num);

//  n = n - 1;

// }

// else

// {

//  printf("%d not been found!\n", num);

//  return(head);

// }

//}

struct student*insert(struct student*head, struct student *stud)

{

struct student*p0, *p1, *p2;

p1 =p2= head;

p0 = stud;

if (head == NULL)

{

head = p0;

p0->next = NULL;

}

else

{

//for (; (p0->num > p1->num) && (p1->next != NULL);)

while((p0->num > p1->num) && (p1->next != NULL))

{

p2 = p1;

p1 = p1->next;

}

if (p0->num <= p1->num)

{

if (head == p1)

{

head = p0;

p0->next = p2;

}

else

{

p2->next = p0; p0->next = p1;

}

}

else

{

p1->next = p0; p0->next = NULL;

}

}

n = n + 1;

return (head);

}

//  if (p1->next == NULL)

//  {

//   if (p0->num > p1->num)

//   {

//    p1->next = p0;

//    p0->next = NULL;

//   }

//   else

//   {

//    head = p0;

//    p0->next = p1;

//   }

//  }

//  else

//  {

//   p2 = p1;

//   while (p0->num > p1->num)

//   {

//    p1 = p1->next;

//   }

//   if (p0->num <= p1->num)

//   {

//    p2->next = p0;

//    p0->next = p1;

//   }

//   else

//   {

//    p1->next = p0;

//    p0->next = NULL;

//   }

//  }

// }

//}

void print(struct student *head)

{

struct student *p;

printf("Now,these %d records are:", n);

p = head;

if (head != NULL)

do

{

printf("%d %f\n", p->num, p->score);

p = p->next;

} while (p != NULL);

}

//

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值