在即将睡觉的时候,以前一个学弟突然来找我问题目,看了一眼,是比较基础的链表,但是又因为刚刚接触数据结构,所以很难理解,于是从床上爬起来花了半小时写了这篇文章,将原本的函数均写进了main里面,或许可以使“新手”方便理解。
(这篇代码还有待精简提高,只是本人困了… 😄)
第一篇文章,不知道咋样…人生嘛,总有第一次的,要勇于尝试。
#include <stdio.h>
#include <malloc.h> /* malloc()等 */
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
typedef int ElemType;
/* 线性表的单链表存储结构 */
typedef struct LNode
{
ElemType num;
ElemType age;
char name;
struct LNode *next;
} LNode, *LinkList;
int main()
{
LinkList L,head;
int i,num_temp;
L=(LinkList)malloc(sizeof(struct LNode));
head=L;
LinkList t=L,s,p; //t指向头结点
for(i=0;i<3;i++){
p=(LinkList)malloc(sizeof(struct LNode));
printf("请输入学号、姓名、年龄:\n");
scanf("%d%s%d",&t->num,&t->name,&t->age);
t->next=p;
if(i==2) t->next=head;
t=t->next; //t仍旧是头指针
}//建立一个单循环链表
printf("请输入要删除的学号:\n");
scanf("%d",&num_temp);
LinkList a=head;
printf("删除学号前:");
while(a->next!=head)
{
printf("%d ",a->num);
printf("%c ",a->name);
printf("%d ",a->age);
a=a->next;
}
printf("%d ",a->num); //输出的是最开始的数据
printf("%c ",a->name);
printf("%d ",a->age);
//输出删除学号前的链表
a=head;
while(a->next->num!=num_temp){
a=a->next;
}
a->next=a->next->next;
a=L;
printf("删除学号后:") ;
while(a->next!=head)
{
printf("%d ",a->num);
printf("%c ",a->name);
printf("%d ",a->age);
a=a->next;
}
printf("%d ",a->num);
printf("%c ",a->name);
printf("%d ",a->age);
}
此代码只有三个学生,可自行更改人数