写一个函数insert,用来向一个动态链表插入节点。

方法一:

#include <stdio.h>
#include <stdlib.h>struct Student
{                       //声明结构体(双向链表结构体)int num;float score;struct Student *prev;struct Student *next;
};struct Student *input();                     //声明输入函数
struct Student *insert(struct Student **stu, int m, char direc, struct Student *ins);   //声明插入函数
void print(struct Student *stu);             //声明输出函数int main()
{struct Student *stud, in, *inser;        //定义结构体指针,插入的结构体变量,指向插入结构体变量的指针int insert_num;                   //定义要插入的结点学号char dir;                         //定义前插后插的方向变量stud=input();                     //调用输入函数print(stud);                      //输出全部数据printf("Please enter insert student info: ");      //输入要插入的学生数据(学号和成绩)scanf("%d %f", &in.num, &in.score);getchar();inser=&in;                        //结构体变量指针指向inprintf("Please enter insert num: ");               //输入要插入哪个学号scanf("%d", &insert_num);getchar();printf("Please enter F or B: ");                   //输入是要插入学号前还是后,F是前插,B是后插。scanf("%c", &dir);getchar();stud=insert(&stud, insert_num, dir, inser);             //调用插入函数,并把返回值head赋值给stud print(stud);return 0;
}//输入函数
struct Student *input()
{struct Student *p1, *p2, *head;int n=0;p1=p2=(struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n+1);scanf("%d %f", &p1->num, &p1->score);getchar();head=NULL;while (p1->num!=0){n++;if (n==1){head=p1;p1->prev=NULL;}else{p2->next=p1;p1->prev=p2;}p2=p1;p1=(struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n+1);scanf("%d %f", &p1->num, &p1->score);getchar();}p2->next=NULL;return head;
}//插入函数
struct Student *insert(struct Student **stu, int m, char direc, struct Student *ins)
{struct Student *p, *head;for (p=*stu, head=p; p!=NULL; p=p->next){if (p->num==m){if (direc=='F'){if (p==head)//若为第一个结构体数组 {ins->next=p;ins->prev=NULL;head->prev=ins;head=ins;}else{ins->prev=p->prev;p->prev->next=ins;ins->next=p;p->prev=ins;}}else if (direc=='B'){if (p->next==NULL)//若为最后一个结构体数组 {p->next=ins;ins->next=NULL;ins->prev=p;}else{ins->next=p->next;p->next=ins;ins->prev=p;}}}}return head;//返回值为head
}//输出函数
void print(struct Student *stu)
{struct Student *p;printf("Output Result:\n");for (p=stu; p!=NULL; p=p->next){printf("%d %.2f\n", p->num, p->score);}
}

在VS2019下,需将源文件的scanf做些修改:

#include <stdio.h>
#include <stdlib.h>struct Student
{                       //声明结构体(双向链表结构体)int num;float score;struct Student* prev;struct Student* next;
};struct Student* input();                     //声明输入函数
struct Student* insert(struct Student** stu, int m, char direc, struct Student* ins);   //声明插入函数
void print(struct Student* stu);             //声明输出函数int main()
{struct Student* stud, in, * inser;        //定义结构体指针,插入的结构体变量,指向插入结构体变量的指针int insert_num;                   //定义要插入的结点学号char dir;                         //定义前插后插的方向变量stud = input();                     //调用输入函数print(stud);                      //输出全部数据printf("Please enter insert student info: ");      //输入要插入的学生数据(学号和成绩)scanf_s("%d %f", &in.num, &in.score);getchar();inser = &in;                        //结构体变量指针指向inprintf("Please enter insert num: ");               //输入要插入哪个学号scanf_s("%d", &insert_num);getchar();printf("Please enter F or B: ");                   //输入是要插入学号前还是后,F是前插,B是后插。scanf_s("%c", &dir, (unsigned int)sizeof(char));getchar();stud = insert(&stud, insert_num, dir, inser);             //调用插入函数,并把返回值head赋值给stud print(stud);return 0;
}//输入函数
struct Student* input()
{struct Student* p1, * p2, * head;int n = 0;p1 = p2 = (struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n + 1);scanf_s("%d %f", &p1->num, &p1->score);getchar();head = NULL;while (p1->num != 0){n++;if (n == 1){head = p1;p1->prev = NULL;}else{p2->next = p1;p1->prev = p2;}p2 = p1;p1 = (struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n + 1);scanf_s("%d %f", &p1->num, &p1->score);getchar();}p2->next = NULL;return head;
}//插入函数
struct Student* insert(struct Student** stu, int m, char direc, struct Student* ins)
{struct Student* p, * head;for (p = *stu, head = p; p != NULL; p = p->next){if (p->num == m){if (direc == 'F'){if (p == head)//若为第一个结构体数组 {ins->next = p;ins->prev = NULL;head->prev = ins;head = ins;}else{ins->prev = p->prev;p->prev->next = ins;ins->next = p;p->prev = ins;}}else if (direc == 'B'){if (p->next == NULL)//若为最后一个结构体数组 {p->next = ins;ins->next = NULL;ins->prev = p;}else{ins->next = p->next;p->next = ins;ins->prev = p;}}}}return head;//返回值为head
}//输出函数
void print(struct Student* stu)
{struct Student* p;printf("Output Result:\n");for (p = stu; p != NULL; p = p->next){printf("%d %.2f\n", p->num, p->score);}
}

方法二:

#include <stdio.h>
#include <stdlib.h>struct Student
{                       //声明结构体(双向链表结构体)int num;float score;struct Student *prev;struct Student *next;
};struct Student *input();                     //声明输入函数
void insert(struct Student **stu, int m, char direc, struct Student *ins);   //声明插入函数
void print(struct Student *stu);             //声明输出函数int main()
{struct Student *stud, in, *inser;        //定义结构体指针,插入的结构体变量,指向插入结构体变量的指针int insert_num;                   //定义要插入的结点学号char dir;                         //定义前插后插的方向变量stud=input();                     //调用输入函数print(stud);                      //输出全部数据printf("Please enter insert student info: ");      //输入要插入的学生数据(学号和成绩)scanf("%d %f", &in.num, &in.score);getchar();inser=&in;                        //结构体变量指针指向inprintf("Please enter insert num: ");               //输入要插入哪个学号scanf("%d", &insert_num);getchar();printf("Please enter F or B: ");                   //输入是要插入学号前还是后,F是前插,B是后插。scanf("%c", &dir);getchar();insert(&stud, insert_num, dir, inser);             //调用插入函数print(stud);return 0;
}//输入函数
struct Student *input()
{struct Student *p1, *p2, *head;int n=0;p1=p2=(struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n+1);scanf("%d %f", &p1->num, &p1->score);getchar();head=NULL;while (p1->num!=0){n++;if (n==1){head=p1;p1->prev=NULL;}else{p2->next=p1;p1->prev=p2;}p2=p1;p1=(struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n+1);scanf("%d %f", &p1->num, &p1->score);getchar();}p2->next=NULL;return head;
}//插入函数
void insert(struct Student **stu, int m, char direc, struct Student *ins)
{struct Student *p, *head, *front=NULL, *back=NULL;for (head=*stu, p=head; p!=NULL; p=p->next) {if (p->num==m) {if (direc=='F') {front=p->prev;back=p;}else if (direc=='B') {front=p;back=p->next;}if(head==back)head=ins;if(front!=NULL)front->next=ins;if(back!=NULL)back->prev=ins;ins->prev=front;ins->next=back;}}*stu=head;//因为stu指向stud,所以把head赋值给del函数里的*stu就是赋值给主函数main的stud
}//输出函数
void print(struct Student *stu)
{struct Student *p;printf("Output Result:\n");for (p=stu; p!=NULL; p=p->next){printf("%d %.2f\n", p->num, p->score);}
}

在VS2019下,需将源文件的scanf做些修改:

#include <stdio.h>
#include <stdlib.h>struct Student
{                       //声明结构体(双向链表结构体)int num;float score;struct Student* prev;struct Student* next;
};struct Student* input();                     //声明输入函数
void insert(struct Student** stu, int m, char direc, struct Student* ins);   //声明插入函数
void print(struct Student* stu);             //声明输出函数int main()
{struct Student* stud, in, * inser;        //定义结构体指针,插入的结构体变量,指向插入结构体变量的指针int insert_num;                   //定义要插入的结点学号char dir;                         //定义前插后插的方向变量stud = input();                     //调用输入函数print(stud);                      //输出全部数据printf("Please enter insert student info: ");      //输入要插入的学生数据(学号和成绩)scanf_s("%d %f", &in.num, &in.score);getchar();inser = &in;                        //结构体变量指针指向inprintf("Please enter insert num: ");               //输入要插入哪个学号scanf_s("%d", &insert_num);getchar();printf("Please enter F or B: ");                   //输入是要插入学号前还是后,F是前插,B是后插。scanf_s("%c", &dir, (unsigned int)sizeof(char));getchar();insert(&stud, insert_num, dir, inser);             //调用插入函数print(stud);return 0;
}//输入函数
struct Student* input()
{struct Student* p1, * p2, * head;int n = 0;p1 = p2 = (struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n + 1);scanf_s("%d %f", &p1->num, &p1->score);getchar();head = NULL;while (p1->num != 0){n++;if (n == 1){head = p1;p1->prev = NULL;}else{p2->next = p1;p1->prev = p2;}p2 = p1;p1 = (struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n + 1);scanf_s("%d %f", &p1->num, &p1->score);getchar();}p2->next = NULL;return head;
}//插入函数
void insert(struct Student** stu, int m, char direc, struct Student* ins)
{struct Student* p, * head, * front=NULL, * back=NULL;for (head = *stu, p = head; p != NULL; p = p->next){if (p->num == m){if (direc == 'F'){front = p->prev;back = p;}else if (direc == 'B'){front = p;back = p->next;}if (head == back)head = ins;if (front != NULL)front->next = ins;if (back != NULL)back->prev = ins;ins->prev = front;ins->next = back;}}*stu = head;//因为stu指向stud,所以把head赋值给del函数里的*stu就是赋值给主函数main的stud
}//输出函数
void print(struct Student* stu)
{struct Student* p;printf("Output Result:\n");for (p = stu; p != NULL; p = p->next){printf("%d %.2f\n", p->num, p->score);}
}

方法三:

#include <stdio.h>
#include <stdlib.h>struct Student
{                       //声明结构体(双向链表结构体)int num;float score;struct Student *prev;struct Student *next;
};struct Student *input();                     //声明输入函数
struct Student *insert(struct Student **stu, int m, char direc, struct Student *ins);   //声明插入函数
void print(struct Student *stu);             //声明输出函数int main()
{struct Student *stud, in, *inser;        //定义结构体指针,插入的结构体变量,指向插入结构体变量的指针int insert_num;                   //定义要插入的结点学号char dir;                         //定义前插后插的方向变量stud=input();                     //调用输入函数print(stud);                      //输出全部数据printf("Please enter insert student info: ");      //输入要插入的学生数据(学号和成绩)scanf("%d %f", &in.num, &in.score);getchar();inser=&in;                        //结构体变量指针指向inprintf("Please enter insert num: ");               //输入要插入哪个学号scanf("%d", &insert_num);getchar();printf("Please enter F or B: ");                   //输入是要插入学号前还是后,F是前插,B是后插。scanf("%c", &dir);getchar();stud=insert(&stud, insert_num, dir, inser);             //调用插入函数,并把返回值head赋值给stud print(stud);return 0;
}//输入函数
struct Student *input()
{struct Student *p1, *p2, *head;int n=0;p1=p2=(struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n+1);scanf("%d %f", &p1->num, &p1->score);getchar();head=NULL;while (p1->num!=0){n++;if (n==1){head=p1;p1->prev=NULL;}else{p2->next=p1;p1->prev=p2;}p2=p1;p1=(struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n+1);scanf("%d %f", &p1->num, &p1->score);getchar();}p2->next=NULL;return head;
}//插入函数
struct Student *insert(struct Student **stu, int m, char direc, struct Student *ins)
{struct Student *p, *head, *front=NULL, *back=NULL;for (head=*stu, p=head; p!=NULL; p=p->next) {if (p->num==m) {if (direc=='F') {front=p->prev;back=p;}else if (direc=='B') {front=p;back=p->next;}if(head==back)head=ins;if(front!=NULL)front->next=ins;if(back!=NULL)back->prev=ins;ins->prev=front;ins->next=back;}}return head;//返回值为head
}//输出函数
void print(struct Student *stu)
{struct Student *p;printf("Output Result:\n");for (p=stu; p!=NULL; p=p->next){printf("%d %.2f\n", p->num, p->score);}
}

在VS2019下,需将源文件的scanf做些修改:

#include <stdio.h>
#include <stdlib.h>struct Student
{                       //声明结构体(双向链表结构体)int num;float score;struct Student* prev;struct Student* next;
};struct Student* input();                     //声明输入函数
struct Student* insert(struct Student** stu, int m, char direc, struct Student* ins);   //声明插入函数
void print(struct Student* stu);             //声明输出函数int main()
{struct Student* stud, in, * inser;        //定义结构体指针,插入的结构体变量,指向插入结构体变量的指针int insert_num;                   //定义要插入的结点学号char dir;                         //定义前插后插的方向变量stud = input();                     //调用输入函数print(stud);                      //输出全部数据printf("Please enter insert student info: ");      //输入要插入的学生数据(学号和成绩)scanf_s("%d %f", &in.num, &in.score);getchar();inser = &in;                        //结构体变量指针指向inprintf("Please enter insert num: ");               //输入要插入哪个学号scanf_s("%d", &insert_num);getchar();printf("Please enter F or B: ");                   //输入是要插入学号前还是后,F是前插,B是后插。scanf_s("%c", &dir, (unsigned int)sizeof(char));getchar();stud = insert(&stud, insert_num, dir, inser);             //调用插入函数,并把返回值head赋值给stud print(stud);return 0;
}//输入函数
struct Student* input()
{struct Student* p1, * p2, * head;int n = 0;p1 = p2 = (struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n + 1);scanf_s("%d %f", &p1->num, &p1->score);getchar();head = NULL;while (p1->num != 0){n++;if (n == 1){head = p1;p1->prev = NULL;}else{p2->next = p1;p1->prev = p2;}p2 = p1;p1 = (struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n + 1);scanf_s("%d %f", &p1->num, &p1->score);getchar();}p2->next = NULL;return head;
}//插入函数
struct Student* insert(struct Student** stu, int m, char direc, struct Student* ins)
{struct Student* p, * head, * front=NULL, * back=NULL;for (head = *stu, p = head; p != NULL; p = p->next){if (p->num == m){if (direc == 'F'){front = p->prev;back = p;}else if (direc == 'B'){front = p;back = p->next;}if (head == back)head = ins;if (front != NULL)front->next = ins;if (back != NULL)back->prev = ins;ins->prev = front;ins->next = back;}}return head;//返回值为head
}//输出函数
void print(struct Student* stu)
{struct Student* p;printf("Output Result:\n");for (p = stu; p != NULL; p = p->next){printf("%d %.2f\n", p->num, p->score);}
}

方法四:

#include <stdio.h>
#include <stdlib.h>struct Student
{                       //声明结构体(双向链表结构体)int num;float score;struct Student *prev;struct Student *next;
};struct Student *input();                     //声明输入函数
void insert(struct Student **stu, int m, char direc, struct Student *ins);   //声明插入函数
void print(struct Student *stu);             //声明输出函数int main()
{struct Student *stud, in, *inser;        //定义结构体指针,插入的结构体变量,指向插入结构体变量的指针int insert_num;                   //定义要插入的结点学号char dir;                         //定义前插后插的方向变量stud=input();                     //调用输入函数print(stud);                      //输出全部数据printf("Please enter insert student info: ");      //输入要插入的学生数据(学号和成绩)scanf("%d %f", &in.num, &in.score);getchar();inser=&in;                        //结构体变量指针指向inprintf("Please enter insert num: ");               //输入要插入哪个学号scanf("%d", &insert_num);getchar();printf("Please enter F or B: ");                   //输入是要插入学号前还是后,F是前插,B是后插。scanf("%c", &dir);getchar();insert(&stud, insert_num, dir, inser);             //调用插入函数print(stud);return 0;
}//输入函数
struct Student *input()
{struct Student *p1, *p2, *head;int n=0;p1=p2=(struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n+1);scanf("%d %f", &p1->num, &p1->score);getchar();head=NULL;while (p1->num!=0){n++;if (n==1){head=p1;p1->prev=NULL;}else{p2->next=p1;p1->prev=p2;}p2=p1;p1=(struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n+1);scanf("%d %f", &p1->num, &p1->score);getchar();}p2->next=NULL;return head;
}//插入函数
void insert(struct Student **stu, int m, char direc, struct Student *ins)
{struct Student *p, *head, *front=NULL, *back=NULL;for (head=*stu, p=head; p!=NULL; p=p->next) {if (p->num==m) {if (direc=='F') {front=p->prev;back=p;}else if (direc=='B') {front=p;back=p->next;}if(head==back)head=ins;if(front!=NULL)front->next=ins;if(back!=NULL)back->prev=ins;ins->prev=front;ins->next=back;}}*stu=head;//因为stu指向stud,所以把head赋值给del函数里的*stu就是赋值给主函数main的stud
}//输出函数
void print(struct Student *stu)
{struct Student *p;printf("Output Result:\n");for (p=stu; p!=NULL; p=p->next){printf("%d %.2f\n", p->num, p->score);}
}

在VS2019下,需将源文件的scanf做些修改:

#include <stdio.h>
#include <stdlib.h>struct Student
{                       //声明结构体(双向链表结构体)int num;float score;struct Student* prev;struct Student* next;
};struct Student* input();                     //声明输入函数
void insert(struct Student** stu, int m, char direc, struct Student* ins);   //声明插入函数
void print(struct Student* stu);             //声明输出函数int main()
{struct Student* stud, in, * inser;        //定义结构体指针,插入的结构体变量,指向插入结构体变量的指针int insert_num;                   //定义要插入的结点学号char dir;                         //定义前插后插的方向变量stud = input();                     //调用输入函数print(stud);                      //输出全部数据printf("Please enter insert student info: ");      //输入要插入的学生数据(学号和成绩)scanf_s("%d %f", &in.num, &in.score);getchar();inser = &in;                        //结构体变量指针指向inprintf("Please enter insert num: ");               //输入要插入哪个学号scanf_s("%d", &insert_num);getchar();printf("Please enter F or B: ");                   //输入是要插入学号前还是后,F是前插,B是后插。scanf_s("%c", &dir, (unsigned int)sizeof(char));getchar();insert(&stud, insert_num, dir, inser);             //调用插入函数print(stud);return 0;
}//输入函数
struct Student* input()
{struct Student* p1, * p2, * head;int n = 0;p1 = p2 = (struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n + 1);scanf_s("%d %f", &p1->num, &p1->score);getchar();head = NULL;while (p1->num != 0){n++;if (n == 1){head = p1;p1->prev = NULL;}else{p2->next = p1;p1->prev = p2;}p2 = p1;p1 = (struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n + 1);scanf_s("%d %f", &p1->num, &p1->score);getchar();}p2->next = NULL;return head;
}//插入函数
void insert(struct Student** stu, int m, char direc, struct Student* ins)
{struct Student* p, * head, * front = NULL, * back = NULL;for (head = *stu, p = head; p != NULL; p = p->next){if (p->num == m){if (direc == 'F'){front = p->prev;back = p;}else if (direc == 'B'){front = p;back = p->next;}if (head == back)head = ins;if (front != NULL)front->next = ins;if (back != NULL)back->prev = ins;ins->prev = front;ins->next = back;}}*stu = head;//因为stu指向stud,所以把head赋值给del函数里的*stu就是赋值给主函数main的stud
}//输出函数
void print(struct Student* stu)
{struct Student* p;printf("Output Result:\n");for (p = stu; p != NULL; p = p->next){printf("%d %.2f\n", p->num, p->score);}
}

方法五:

#include <stdio.h>
#include <stdlib.h>struct Student
{                       //声明结构体(双向链表结构体)int num;float score;struct Student *prev;struct Student *next;
};struct Student *input();                     //声明输入函数
void insert(struct Student **stu, int m, char direc, struct Student *ins);   //声明插入函数
void print(struct Student *stu);             //声明输出函数int main()
{struct Student *stud, in, *inser;        //定义结构体指针,插入的结构体变量,指向插入结构体变量的指针int insert_num;                   //定义要插入的结点学号char dir;                         //定义前插后插的方向变量stud=input();                     //调用输入函数print(stud);                      //输出全部数据printf("Please enter insert student info: ");      //输入要插入的学生数据(学号和成绩)scanf("%d %f", &in.num, &in.score);getchar();inser=&in;                        //结构体变量指针指向inprintf("Please enter insert num: ");               //输入要插入哪个学号scanf("%d", &insert_num);getchar();printf("Please enter F or B: ");                   //输入是要插入学号前还是后,F是前插,B是后插。scanf("%c", &dir);getchar();insert(&stud, insert_num, dir, inser);             //调用插入函数print(stud);return 0;
}//输入函数
struct Student *input()
{struct Student *p1, *p2, *head;int n=0;p1=p2=(struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n+1);scanf("%d %f", &p1->num, &p1->score);getchar();head=NULL;while (p1->num!=0){n++;if (n==1){head=p1;p1->prev=NULL;}else{p2->next=p1;p1->prev=p2;}p2=p1;p1=(struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n+1);scanf("%d %f", &p1->num, &p1->score);getchar();}p2->next=NULL;return head;
}//插入函数
void insert(struct Student **head, int m, char direc, struct Student *ins)//head指向stud,修改*head就是修改stud
{struct Student *p, *front=NULL, *back=NULL;for (p=*head; p!=NULL; p=p->next) {if (p->num==m) {if (direc=='F') {front=p->prev;back=p;}else if (direc=='B') {front=p;back=p->next;}if(*head==back)*head=ins;if(front!=NULL)front->next=ins;if(back!=NULL)back->prev=ins;ins->prev=front;ins->next=back;}}
}//输出函数
void print(struct Student *stu)
{struct Student *p;printf("Output Result:\n");for (p=stu; p!=NULL; p=p->next){printf("%d %.2f\n", p->num, p->score);}
}

在VS2019下,需将源文件的scanf做些修改:

#include <stdio.h>
#include <stdlib.h>struct Student
{                       //声明结构体(双向链表结构体)int num;float score;struct Student* prev;struct Student* next;
};struct Student* input();                     //声明输入函数
void insert(struct Student** stu, int m, char direc, struct Student* ins);   //声明插入函数
void print(struct Student* stu);             //声明输出函数int main()
{struct Student* stud, in, * inser;        //定义结构体指针,插入的结构体变量,指向插入结构体变量的指针int insert_num;                   //定义要插入的结点学号char dir;                         //定义前插后插的方向变量stud = input();                     //调用输入函数print(stud);                      //输出全部数据printf("Please enter insert student info: ");      //输入要插入的学生数据(学号和成绩)scanf_s("%d %f", &in.num, &in.score);getchar();inser = &in;                        //结构体变量指针指向inprintf("Please enter insert num: ");               //输入要插入哪个学号scanf_s("%d", &insert_num);getchar();printf("Please enter F or B: ");                   //输入是要插入学号前还是后,F是前插,B是后插。scanf_s("%c", &dir, (unsigned int)sizeof(char));getchar();insert(&stud, insert_num, dir, inser);             //调用插入函数print(stud);return 0;
}//输入函数
struct Student* input()
{struct Student* p1, * p2, * head;int n = 0;p1 = p2 = (struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n + 1);scanf_s("%d %f", &p1->num, &p1->score);getchar();head = NULL;while (p1->num != 0){n++;if (n == 1){head = p1;p1->prev = NULL;}else{p2->next = p1;p1->prev = p2;}p2 = p1;p1 = (struct Student*)malloc(sizeof(struct Student));printf("Please enter No.%d student info: ", n + 1);scanf_s("%d %f", &p1->num, &p1->score);getchar();}p2->next = NULL;return head;
}//插入函数
void insert(struct Student** head, int m, char direc, struct Student* ins)//head指向stud,修改*head就是修改stud
{struct Student* p, * front = NULL, * back = NULL;for (p = *head; p != NULL; p = p->next){if (p->num == m){if (direc == 'F'){front = p->prev;back = p;}else if (direc == 'B'){front = p;back = p->next;}if (*head == back)*head = ins;if (front != NULL)front->next = ins;if (back != NULL)back->prev = ins;ins->prev = front;ins->next = back;}}
}//输出函数
void print(struct Student* stu)
{struct Student* p;printf("Output Result:\n");for (p = stu; p != NULL; p = p->next){printf("%d %.2f\n", p->num, p->score);}
}

写一个函数insert,用来向一个动态链表插入节点。相关推荐

  1. (C语言)写一个函数insert,用来向一个动态链表插入节点

    写一个函数insert,用来向一个动态链表插入节点 用creat,print,del,insert四个函数,编写主函数,先后调用这些函数,实现链表的建立,输出,删除和插入,从主函数中指定需要删除和插入 ...

  2. ACMNO.27 Python的两行代码解决 C语言-字符逆序 写一函数。使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入 一行字符 输出 逆序后的字符串

    题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串. 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcdef 样例输出 fedcba654321 来源 ...

  3. ACMNO.24 C语言-转置矩阵 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 输入 一个3x3的矩阵 输出 转置后的矩阵 样例

    题目描述 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换. 输入 一个3x3的矩阵 输出 转置后的矩阵 样例输入 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 2 5 8 3 ...

  4. 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换

    写一个函数,使给定的一个二维数组(3×3)转置,即行列互换 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 163  Solved: 120 [Subm ...

  5. 写一个函数取出php,写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名...

    写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名 例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php 直接先上方 ...

  6. 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。

    题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串. 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcdef 样例输出 fedcba654321 #i ...

  7. 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。

    题目描述 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换. 输入 一个3x3的矩阵 输出 无 样例输入 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 2 5 8 3 6 9 # ...

  8. 写一个函数,使给定的一个3 × 3的二维整型数组转置,即行列互换。

    题目来源: C语言程序设计(第四版)/ 第七章 / 习题7.3 题目要求: 写一个函数,使给定的一个3 × 3的二维整型数组转置,即行列互换. 具体思路: 将给定的二维整型数组a用另外一个二维数组b备 ...

  9. 写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串

    写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串 #include<stdio.h> #include<string.h> int main() {void ...

最新文章

  1. PHP7.0 Window10 Redis安装教程
  2. Android复习08【内容提供者】
  3. Android成长日记-使用GridView显示多行数据
  4. java改变变量编码方式_Java 8中的5个功能将改变您的编码方式
  5. 管家婆打印自定义编辑_打印相关,人手一份!
  6. python中类型转换的规则_Python 类型转换指南
  7. 用python模拟《流浪地球》的木星引力弹弓效应
  8. Node.js、Express、Socket.io 入门
  9. java-spark的各种常用算子的写法
  10. python 字符串编码 str和unicode 区别以及相互转化 decode('utf-8') encode('utf-8')
  11. 游戏夜读 | 游戏关卡设计师
  12. 河海大学计算机专硕英语面试,河海大学翻译硕士(英语)考研复试流程
  13. 美国主要经济数据解注释
  14. Android Display ID 对应关系
  15. Anroid Studio开发---日记本App
  16. python残差分析图
  17. 一份很哇塞的产品经理述职报告(附PPT下载)
  18. 即时通信和实时通信的区别
  19. 2021年中国亚马逊耳环市场趋势报告、技术动态创新及2027年市场预测
  20. C#梁朝伟变刘德华之山寨实现

热门文章

  1. 归并算法经典应用——求解逆序数
  2. 2)速卖通商品信息采集(进阶)
  3. 用webbroswer控件自动点击确定按钮
  4. [2021年最新]国产时序性数据TDenige入门
  5. MODIS MOD13A3 ndvi数据sg批量滤波
  6. OSChina 周日乱弹 ——该用什么表情面对这个世界
  7. OC 血压计 蓝牙BLE4.0 链接踩坑开发
  8. 三郎前端特效学习源代码:图片主页轮播组件
  9. 几款值得选的SSH客户端软件
  10. python pymssql - pymssql模块官方文档的翻译