C语言 链表

原创 2013年12月05日 17:02:51
// LinkTable.cpp : Defines the entry point for the console application.
// 程序运行,用户输入学生数,根据用户输入学生数,动态创建链表,提示输入学生
// 姓名、成绩,最后输出所有学生数据以及平均成绩
#include "stdafx.h"
#include
#include
struct Student{
 char name[30];
 int  score;
 struct Student *p_next;
};
int main(int argc, char* argv[])
{
 int i,n;
 char c,t;
 struct Student* pHead = NULL;
 struct Student* pLast = NULL; 
 i = 0;
 while(1)
 {
  printf("输入学生信息,请按 y ,其它键退出...\n"); 
  c = getchar(); 
  if(!(c == 'y' || c == 'Y')) // 输入不是 y 或 Y ,退出
   break;
  struct Student* pCurr = (struct Student*)malloc(sizeof(struct Student));
  printf("请输入学生 %d 姓名:",i+1);
  scanf("%s",pCurr->name);
  printf("请输入学生%d成绩:",i+1);
  scanf("%d",&pCurr->score);
  pCurr->p_next = NULL; // 很重要,用于判断是否为最后一个节点 
  if(i == 0)
  {
   pHead = pCurr;
   pLast = pCurr;
  }
  else
  {
   pLast->p_next = pCurr;
   pLast = pCurr;
  }
  i ++;
  // 清空键盘缓冲区
  while((t = getchar()) != '\n' && t != EOF);
 }
 
 // 链表遍历(访问每个节点一次)
 pLast = pHead;
 i = 1;
 n = 0;
 int sum = 0;
 while(pLast)
 {
  n++;
  printf("学生 %d 姓名:%s 成绩:%d\n",i,pLast->name,pLast->score);
  sum += pLast->score;
  pLast = pLast->p_next; // 指针指向下一个节点  
  i++;
 }
 double avg = sum/(double)n;
 printf("平均成绩 = %lf\n",avg);
 // 释放内存 
 while(pHead)
 {
  pLast = pHead->p_next;
  free(pHead);
  pHead = pLast;
 }
 return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

单向链表的C语言实现

  • 2017年11月07日 20:32
  • 14KB
  • 下载

C语言链表排序操作

  • 2017年06月29日 13:41
  • 3KB
  • 下载

C语言实现单链表的初始化、创建、遍历等操作

编译环境:VC++6.0 #include#includetypedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;LinkL...
  • ckangle
  • ckangle
  • 2013年07月29日 10:22
  • 6682

c语言学生信息管理系统(链表、文件)

这是本人历时两周的课程设计,名为学生信息管理系统课程设计(基于链表与文件的设计),(有的地方还可以加以修改含bug)希望对大家对链表与文件反面的知识有所帮助!...

c语言实现链表

  • 2016年11月11日 22:50
  • 3KB
  • 下载

c语言链表.c

  • 2015年01月13日 15:02
  • 162B
  • 下载

单链表插入和删除结点c语言的实现

个人学习的一些笔记,如果有误,希望指正
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言 链表
举报原因:
原因补充:

(最多只允许输入30个字)