请编写程序实现链表的建立、插入、删除、遍历的基本运算,其中顺序表中每一个数据元素的类型定义为学生信息的结构体,包括学号、姓名和成绩。
时间: 2023-06-05 10:47:50 浏览: 176
定义一个包含学生信息(学号,姓名,成绩)的顺序表
好的,以下是链表的建立、插入、删除、遍历的基本运算的程序实现,其中顺序表中每一个数据元素的类型定义为学生信息的结构体,包括学号、姓名和成绩:
//定义学生信息结构体
typedef struct student{
int id; //学号
char name[20]; //姓名
float score; //成绩
struct student *next; //指向下一个节点的指针
}Student;
//链表的建立
Student* createList(){
Student *head, *p, *q;
head = (Student*)malloc(sizeof(Student)); //创建头节点
head->next = NULL;
q = head;
int n;
printf("请输入学生人数:");
scanf("%d", &n);
for(int i=; i<n; i++){
p = (Student*)malloc(sizeof(Student)); //创建新节点
printf("请输入第%d个学生的学号、姓名和成绩:", i+1);
scanf("%d %s %f", &p->id, p->name, &p->score);
p->next = NULL;
q->next = p;
q = p;
}
return head;
}
//链表的插入
void insertList(Student *head, int pos){
Student *p, *q;
p = (Student*)malloc(sizeof(Student)); //创建新节点
printf("请输入要插入的学生的学号、姓名和成绩:");
scanf("%d %s %f", &p->id, p->name, &p->score);
p->next = NULL;
q = head;
for(int i=; i<pos-1; i++){ //找到要插入的位置
q = q->next;
}
p->next = q->next;
q->next = p;
}
//链表的删除
void deleteList(Student *head, int pos){
Student *p, *q;
q = head;
for(int i=; i<pos-1; i++){ //找到要删除的位置
q = q->next;
}
p = q->next;
q->next = p->next;
free(p); //释放被删除节点的内存空间
}
//链表的遍历
void traverseList(Student *head){
Student *p;
p = head->next;
while(p != NULL){
printf("学号:%d\t姓名:%s\t成绩:%.2f\n", p->id, p->name, p->score);
p = p->next;
}
}
int main(){
Student *head;
head = createList(); //建立链表
traverseList(head); //遍历链表
insertList(head, 3); //在第3个位置插入节点
traverseList(head); //遍历链表
deleteList(head, 2); //删除第2个节点
traverseList(head); //遍历链表
return ;
}
阅读全文