c语言链表中插入数据问题

c语言链表中插入数据问题,第1张

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

typedef struct

{

int num

char name[10]

int grade

}student

typedef struct node

{

student date

struct node *next

}*link

link head = NULL

student creat(void)

{

student p

printf("请输入学生学号:")

setbuf(stdin,(char *)0)

scanf("%d",&p.num)

printf("请输入学生名字:")

setbuf(stdin,(char *)0)

scanf("%s",p.name)

printf("请输入学生成绩:")

setbuf(stdin,(char *)0)

scanf("%d",&p.grade)

return p

}

void insert(student date)

{

link p = (struct node*)malloc(sizeof *p)

p->date=date

p->next=head

head=p

}

void output(void)

{

link p = head

printf("|----学号-----姓名-------成绩--|\n")

while(p!=NULL)

{

printf("|%-9d%-11s%-6d|\n",p->date.num,p->date.name,p->date.grade)

p=p->next

}

printf("|------------------------------|\n")

}

void init(void)

{

puts("*************欢迎使用信息查询系统*************")

puts("*\t+-------------------------+*")

puts("*\t| 1.添加记录|*")

puts("*\t| 2.显示所有记录|*")

puts("*\t| 0.保存退出|*")

puts("*\t+-------------------------+*")

puts("********************************************")

printf("\t请输入您的选择:")

}

int main()

{

int n

char cmd[10]

do{

//system("cls")

men:init()

setbuf(stdin,(char *)0)//清空输入流

scanf("%[^\n]",cmd)//接受除换行以外的所有字符存入cmd中,并加上'\0'标志

sscanf(cmd,"%d",&n)

/*处理当命令不符合条件的情况*/

if(strlen(cmd) != 1 || n <0 || n >2 || !(*cmd >= '0' &&*cmd <= '2'))

{

printf("\t输入错误或没有这个选项!")

getchar()

getchar()

goto men

}

switch(n)

{

case 1:insert(creat())puts("\t添加成功!")break

case 2:output()break

case 0: return 0

default :break

}

printf("\tPress Enter To Continue!")

getchar()

getchar()

}while(n != 0)

return 0

}

你这样做,可以在插入前提前验证pos值有效性,减少无用的循环次数,比上面代码好。len可以定义成全局变量,在每次插入时累加,这样计算len的函数也可以省略。

当然上面两个函数只限于以节点个数为条件插入。如果是以节点成员值为条件插入,还是要循环比较的。(比如学生结点,在某位学生后面插入,那么就要循环比较姓名或学号)。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11717292.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存