链表学习练习题

题目来源:SWUST OJ 程序设计C 实验六 结构体 题目三 学生结构体链表(0068)

Description

用结构体建立学生信息,学生信息包括学号、姓名、成绩,建立一个有 n 名学生的链 表, 并将链表输出。

Input

一次输入学生信息包括学号、姓名。0 0 0结束程序

Output

从链表表头到表位依次输出。

Sample Output

C1001 Li 70

M1002 He 89

E1003 Xie 83

M1004 Wu 92

E1005 Bao 80

Sample Input

C1001 Li 70

M1002 He 89

E1003 Xie 83

M1004 Wu 92

E1005 Bao 80

源代码(Accepted):

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define LEN sizeof(struct student)
 4 struct student//表示每个结点
 5 {
 6     char num[50];
 7     char name[50];
 8     float score;
 9     struct student *next;//指向下一个结点
10 };
11 int main()
12 {
13     struct student *p1,*p2,*head;
14     p1=p2=(struct student *)malloc(LEN);//开辟第一个结点
15     scanf("%s%s%f",p1->num,p1->name,&p1->score);//输入第一个结点
16     head=NULL;
17     if(p1->num[0]==‘0‘&&p1->name[0]==‘0‘&&p1->score==0)//判断第一次是否结束循环
18         return 0;
19     for(int i=0;p1->num[0]!=‘0‘||p1->name[0]!=‘0‘||p1->score!=0;i++){//输入结束的条件
20         if(i==0)
21             head=p1;//链表头记录下来
22         else
23         {
24             p2=p1;//用p2来记录p1刚刚走过的结点
25             p1=(struct student *)malloc(LEN);//开辟新的结点来存储新的内容
26             p2->next=p1;//p2的next指向p1
27             scanf("%s%s%f",&p1->num,p1->name,&p1->score);//输入结点内容
28         }
29     }
30     p1->next=NULL;//最后的结点指向NULL
31     p1=head;
32     while(p1->next!=NULL){//输出数据
33         printf("%s %s %g\n",p1->num,p1->name,p1->score);
34         p1=p1->next;
35     }
36     return 0;
37 }
时间: 2024-08-11 05:34:38

链表学习练习题的相关文章

LIST_ENTRY链表学习

链表是驱动开发中经常遇到的一个数据结构,主要是双向循环链表:要使用链表,需要用到一个LIST_ENTRY的结构,其定义如下: typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; // 指向下一个节点 struct _LIST_ENTRY *Blink; // 指向前一个节点 } LIST_ENTRY, *PLIST_ENTRY; 每个双向链表都是一个以链表头作为链表第一个元素,初次使用时需要进行初始化,主要讲链表头的Flink,Blin

链表经典练习题

总结了编程之美上面关于链表的题目,有不正确的地方,欢迎拍砖,等编程之美看完了,回头刷其他题时遇到链表再补充~ 目录如下(点击展开上面的目录到感兴趣的题目): /************************************************************************/ /*                 链表经典练习题                                               1.从无头链表中删除节点  2.链表逆转  3

数据结构链表学习

今天初步学习数据结构链表,学习过程中感觉对于指针的理解还差很多,而且对于VS的调试也不会使用,调查问题只能靠一遍一遍的梳理逻辑,效率不是一般的低下..接下来得赶紧学习下VS的使用.. 今天链表只是初步学习,写的例子也比较简单,如下: 定义链表的数据结构,只简单的定义了一个数据和一个指向后继的指针 1 struct List { 2 int num; 3 List *next; 4 }; 接下来就是链表的创建,返回一个指针地址赋给主函数中的头指针,用于之后的增删改查等等 1 List *creat

链表学习

最近看了一小部分<大话数据结构>对链表的部分有了更深刻的认识,这本书真的挺不错,很能吸引读者,不会枯燥.链表部分,之前有过学习,但并没有深入,当时还感觉链表也就那么回事,做题时有个插入节点的,当时想法是对的,但细节有问题,因而一直没能做成功. 进行插入操作时,我当时想法是这样的(伪代码): /* 假设已经创建了一个链表 LinkList */ int linkListInsert(int i) { int j; LinkList *s; p=head; /*全局变量*/ j=1; while(

12-15链表学习

一.动态分配内存realloc void*//返回重新分配的内存空间的首地址 realloc(void*//void*指针指向的内存区域必须是使用malloc分配过的,size_t//现在总共需要多少内存空间); 二.链表:单链表,双链表 结点node Data              Data node->next指针       next指针 在定义结构体时,要明确内存空间. 三.保存一组年龄的数据. #include <stdio.h> #include <stdlib.h

数据结构 链表学习笔记

#include<stdio.h> #include<stdlib.h> #include<string.h> struct stu_node{ char num[15]; int score; struct stu_node *next; }; struct stu_node *stu_create() { struct stu_node *head, *newN, *tail; char num[15]; int score; printf("请输入学生的

线性表之单链表学习小结(初学数据结构必看)

花了好几个小时,详细规划出了整个过程,包括所有基本操作...有什么疑问请下方留言 #include<iostream> using namespace std; #define ElemType char #define ERROR 0 #define OK 1 typedef struct Node { ElemType data; struct Node *next; }Node,*LinkList; void init_linklist(LinkList L)/*对单链表进行初始化*/

C++链表学习笔记

如果要保存一些数据类型相同的变量,比如n个int类型的变量,就可以存放在一个数组中,然后通过下标方便的访问.可是数组的缺点也比较多,第一个就是在声明数组的时候,数组的长度必须是明确的,即便是动态声明一个数组,处理器必须要知道长度才能在内存中找出一段连续的内存来保存你的变量.第二个缺点也就是上一句中说到的,数组在内存中的地址必须是连续的,这样就可以通过数组首地址再根据下标求出偏移量,快速访问数组中的内容.现在计算机内存越来越大,这也算不上什么缺点.第三个缺点,也是非常难以克服的缺点,就是在数组中插

链表学习二:链表反转与查找倒数第K个

1 //单链表反转 2 ListNode* RevertList(ListNode* m_pHead){ 3 ListNode* pCurrent = m_pHead; 4 ListNode* pPrev=NULL; 5 ListNode* pNext =NULL; 6 7 while (pCurrent != NULL) 8 { 9 pNext = pCurrent->m_pNext; 10 pCurrent->m_pNext = pPrev; 11 pPrev = pCurrent; 12