c语言链表操作怎么用啊,刚学不太懂。对于输入的若干学生的信息(学号、姓名、年龄),要求使用链表完成:还要在中间插入和删除。
供参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node {
char num[10]; //学号
char name[10]; //姓名
int age; //年龄
struct node* next;
}Lnode, * LinkNode;
void creatlist(LinkNode* L, int n)
{
int i;
LinkNode pt;
for (i = 0; i < n; i++) {
pt = (LinkNode)malloc(sizeof(Lnode));
pt->next = NULL;
scanf("%s %s %d", pt->num, pt->name, &pt->age);
pt->next = (*L);
(*L) = pt;
}
}
void insertlist(LinkNode L, LinkNode pt, int i, int n)
{
int k = 0;
if (i < 1 || i > n) return;
LinkNode p = L;
while (p && k < i - 1) {
k++;
p = p->next;
}
pt->next = p->next;
p->next = pt;
}
void deletelist(LinkNode* L, char* s_num)
{
LinkNode p = (*L), pre = NULL;
while (p) {
if (strcmp(p->num, s_num) == 0) {
if (p == (*L)) {
(*L) = p->next;
free(p);
p = (*L);
}
else {
pre->next = p->next;
free(p);
p = pre;
}
}
else {
pre = p;
p = p->next;
}
}
}
void printlist(LinkNode L)
{
LinkNode p = L;
while (p) {
printf("%s %s %d\n", p->num, p->name, p->age);
p = p->next;
}
}
int main()
{
int T, n, m;
scanf("%d", &T);//输入正整数 T
while (T--) {
char num[10] = { 0 };//待删除学生的学号
LinkNode L = NULL, pt = NULL;
scanf("%d", &n);//输入正整数 n ,表示 n 个学生
creatlist(&L, n); //输入 n 行学生信息,创建链表
pt = (LinkNode)malloc(sizeof(Lnode));
pt->next = NULL;
scanf("%d %s %s %d", &m, pt->num, pt->name, &pt->age);//输入m 和一个新学生的信息
scanf("%s", num); //输入待删除学生的学号
printlist(L); //以下开始依次输出描述中要求的学生信息
insertlist(L, pt, m, n);
printlist(L);
deletelist(&L, num);
printlist(L);
}
return 0;
}
我的博客有一篇链表的文章,你可以参考一下。
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633