不带头结点的链表
程序员文章站
2022-03-15 17:34:26
...
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(grade)
typedef struct Grade{
int num;
float score;
struct Grade *next;
}grade;
grade *create(){//创建动态链表
int n=0;//链表有几个元素
grade *head=NULL,*p1=NULL,*p2=NULL;
do{
p1=(grade *)malloc(LEN);
scanf("%d%f",&p1->num,&p1->score);
if(p1->num==0){
if(!head){
return head;
}
else
{
p2->next=NULL;
return head;
}
}
n++;
if(n==1){
head=p2=p1;
}
else{
p2->next=p1;
p2=p1;
}
}while(1);
}
void print(grade *head){//打印链表全部内容
grade *p=head;
while(p!=NULL){
printf("%-5d%-5.2f\n",p->num,p->score);
p=p->next;
}
}
grade *del(grade *head){//删除指定位置的节点
printf("请输入要删除节点的位置:");
grade *p=head,*p1;
int n,i,j;
scanf("%d",&n);
if(n==0);
else if(n==1)
head=head->next;
else{
i=n;
while(i-1){
p1=p;
p=p->next;
i--;
}
p1->next=p->next;
}
return head;
}
grade *insert(grade *head){//向指定位置插入节点
grade *p=head,*temp,*q=malloc(LEN);
int n,i;
printf("请输入要插入节点的位置(插入尾部请输入0):");
scanf("%d",&n);
printf("请输入要插入节点的信息:");
q->next=NULL;
scanf("%d%f",&(q->num),&(q->score));
if(n==0){
while(p->next!=NULL)
p=p->next;
p->next=q;
}
else if(n==1){
temp=head;
head=q;
head->next=temp;
}else{
i=n;
while(i-1){
temp=p;
p=p->next;
i--;
}
temp->next=q;
q->next=p;
}
return head;
}
int main(){
grade *head=create();
print(head);
head=del(head);
print(head);
head=insert(head);
print(head);
return 0;
}
上一篇: 以司法裁判向滥用“人脸识别”说不
下一篇: 护理机器人能否彻底取代保健医生?