建立单向链表。每个结点包括学号、姓名、性别、年龄和 C 语言 课程成绩。实现按学号删除指定结点功能。
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int number;
wchar_t name[5];
wchar_t sex;
int age;
int grade;
struct node* next;
}Node;
typedef Node* linklist;
void creatlinklist(linklist* L, int n)//尾插法
{
linklist p ;
linklist r;
int i;
*L = (linklist)malloc(sizeof(Node));
r=*L;
for (i = 0; i < n; i++)
{
p = (linklist)malloc(sizeof(Node));
printf("输入第%d个学生的信息\n", i+1);
scanf("%d %s %s %d %d", &(p->number), &(p->name), &(p->sex), &(p->age), &(p->grade));
r->next = p;
r = p;
}
r->next=NULL;
}
int listdelete(linklist* L, int i)//删除链表l中的第i个元素
{
int j;
linklist p, q;
p = *L;
j = 1;
while (p->next && j < i)//找到第i个元素
{
p = p->next;
++j;
}
if (!(p->next) || j > i)
return 0;//未找到i节点报错
q = p->next;
p->next = q->next;
free(q);
return 1;
}
int main()
{
int m, n,i;
linklist p;
linklist l;
printf("学生数目\n");
scanf("%d", &m);
creatlinklist(&l, m);
/* for(i=0;i<m;i++)
{
p=(*l);
printf("输入第%d个学生的信息\n", i+1);
scanf("%d %ws %wc %d %d", &(p->number), (p->name), (p->sex), &(p->age), &(p->grade));
p=p->next;
} */
printf("删除第几个学生信息\n");
scanf("%d",&n);
listdelete(&l, n);
printf("%d",(l->next->number));//输出第一个学生学号
return 0;
}