作业(3)

指针是一个地址,指向的是个类型:

我们知道,c语言中的类型有int,char,bool(这个不常用),一般我们使用int,char就可以满足一般的类型需求的,如果对于变量的长度过大,就是用long ,float,double,关于各个类型使用的的长度问题,可以使用sizeof(int)或者sizeof(long)来查看各个类型,在系统中的小。(这个东西我并不清楚。。)

而指针就是一个8个字节(64系统)。

链表我的理解要包含以下特征:

(1).由n个节点离散分配;(2).每个节点通过指针连接(3)每一个节点由一个前驱节点和一个后驱节点(4).首节点没有前驱节点,尾节点没有后驱节点;

满足上面的4条,我们就称为链表;链表既然由很多个节点,那节点又由什么组成?节点由两个部分组成,一是数据域,用来存放有效数据;二是指针域,用来指向下一个节点;下面用C语言来构建链表数据结构,首先应该构造出节点,然后再把所有的节点连起来,就构成了链表;

源代码:

#include <stdio.h>  
#include <conio.h>  
#include <string.h>  
#include <stdlib.h>
#define N 3
typedef struct node
{
   char name[20];
   struct node *link;
}stud;
stud * creat(int n) /*建立单链表的函数*/
{
   stud *p,*h,*s;
   int i;
   if((h=(stud *)malloc(sizeof(stud)))==NULL)
   {
      printf("不能分配内存空间!");
      exit(0);
   }
   h->name[0]=‘\0‘;
   h->link=NULL;
   p=h;
   for(i=0;i<N;i++)
   {
     if((s= (stud *) malloc(sizeof(stud)))==NULL)
     {
        printf("不能分配内存空间!");
        exit(0);
     }
     p->link=s;
     printf("请输入第%d个人的姓名:",i+1);
     scanf("%s",s->name);
     s->link=NULL;
     p=s;
   }
   return(h);
}
stud * search(stud *h,char *x) /*查找函数*/
{
   stud *p;
   char *y;
   p=h->link;
   while(p!=NULL)
   {
     y=p->name;
     if(strcmp(y,x)==0)
       return(p);
     else p=p->link;
   }
   if(p==NULL)
     printf("没有查找到该数据!");
}

stud * search2(stud *h,char *x) 
/*另一个查找函数,返回的是上一个查找函数的直接前驱结点的指针,
h为表头指针,x为指向要查找的姓名的指针
其实此函数的算法与上面的查找算法是一样的,只是多了一个指针s,并且s总是指向指针p所指向的结点的直接前驱,
结果返回s即是要查找的结点的前一个结点*/
{
   stud *p,*s;
   char *y;
   p=h->link;
   s=h;
   while(p!=NULL)
   {
     y=p->name;
     if(strcmp(y,x)==0)
       return(s);
     else
     {
       p=p->link;
       s=s->link;
     }
   }
   if(p==NULL)
    printf("没有查找到该数据!");
}
void insert(stud *p) /*插入函数,在指针p后插入*/
{
   char stuname[20];
   stud *s; /*指针s是保存新结点地址的*/
   if((s= (stud *) malloc(sizeof(stud)))==NULL)
   {
     printf("不能分配内存空间!");
     exit(0);
   }
   printf("请输入你要插入的人的姓名:");
   scanf("%s",stuname);
   strcpy(s->name,stuname); /*把指针stuname所指向的数组元素拷贝给新结点的数据域*/
   s->link=p->link; /*把新结点的链域指向原来p结点的后继结点*/
   p->link=s; /*p结点的链域指向新结点*/
}

void del(stud *x,stud *y) /*删除函数,其中y为要删除的结点的指针,x为要删除的结点的前一个结点的指针*/
{
  stud *s;
  s=y;
  x->link=y->link;
  free(s);
}

void print(stud *h)
{
   stud *p;
   p=h->link;
   printf("数据信息为:\n");
   while(p!=NULL)
   {
     printf("%s \n",&*(p->name));
     p=p->link;
   }
}

void quit()
{
  exit(0);
}
void menu(void)
{
    system("cls"); 
    printf("\t\t\t单链表C语言实现实例\n");
    printf("\t\t|--------------------|\n");
    printf("\t\t| |\n");
    printf("\t\t| [1] 建 立 新 表 |\n");
    printf("\t\t| [2] 查 找 数 据 |\n");
    printf("\t\t| [3] 插 入 数 据 |\n");
    printf("\t\t| [4] 删 除 数 据 |\n");
    printf("\t\t| [5] 打 印 数 据 |\n");
    printf("\t\t| [6] 退 出 |\n");
    printf("\t\t| |\n");
    printf("\t\t| 如未建立新表,请先建立! |\n");
    printf("\t\t| |\n");
    printf("\t\t|-------------------|\n");
    printf("\t\t 请输入你的选项(1-6):");
}
main()
{
    int choose;
    stud *head,*searchpoint,*forepoint;
    char fullname[20];

while(1)
    {
      menu();
      scanf("%d",&choose);
      switch(choose)
      {
        case 1:
           head=creat(N);
           break;
        case 2:
     printf("输入你所要查找的人的姓名:");
           scanf("%s",fullname);
           searchpoint=search(head,fullname);
           printf("你所查找的人的姓名为:%s",*&searchpoint->name);
           printf("\n按回车键回到主菜单。");
           getchar();getchar();
           break;
        case 3: printf("输入你要在哪个人后面插入:");
           scanf("%s",fullname);
           searchpoint=search(head,fullname);
           printf("你所查找的人的姓名为:%s",*&searchpoint->name);
           insert(searchpoint);
           print(head);
           printf("\n按回车键回到主菜单。");
           getchar();getchar();
           break;
        case 4:
     print(head);
           printf("\n输入你所要删除的人的姓名:");
           scanf("%s",fullname);
           searchpoint=search(head,fullname);
           forepoint=search2(head,fullname);
           del(forepoint,searchpoint);
           break;
        case 5:
     print(head);
           printf("\n按回车键回到主菜单。");
           getchar();getchar();
           break;
        case 6:quit();
           break;
        default:
     printf("你输入了非法字符!按回车键回到主菜单。");
           system("cls"); 
           menu();
           getchar();
      }
   }
}

心得体会:

本系统的使用则更为人性化、简单化,只要操作人员能掌握基本的Windows系统操作、学会上网,就可以轻松掌握该系统的使用方法。所有的数据服务均在服务器上完成。只要服务器不出问题,所有数据和操作的安全性、可靠性是令人满意的。该系统的实施和推广有望大大降低当前许多学校教务管理的繁杂任务,提高工作效率。

当然,学生信息管理系统是一个比较庞大的系统,如果要实现整个学校的事务纯粹自动化管理,所牵涉的模块还有太多太多,我在本系统里面,只是实现了许多的基本功能,还有许多的管理功能,如:图书馆的借阅管理和学生的学籍等信息进行挂钩、教师的信息还应牵涉到级别薪酬的考核等功能,都是在本次开发中还未能实现的功能,只能在后续的开发中逐步实现。

时间: 2024-08-12 09:20:50

作业(3)的相关文章

软件工程——第二次作业(2)

施工中-- 作业要求:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/922 项目要求是编写出一个拥有"词频统计"功能的小程序,作为一个小程序,若只是实现基本的词频统计功能,其实并不是很难.但是,如果再附加一些需求和功能的话就会让我感到有点难度了,更何况为了以后课程的要求,我选择使用Visual Studio 2015编译器和C#语言这两种从未学过的工具,在4-5天之内共10个小时左右(预计,但是实际上确实是花了更多时间

2017282110285--第一次个人作业

第一部分:结缘计算机 1.你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 其实我从高一就开始接触编程了,在高中我搞了两年的算法竞赛,算是有一点算法基础(捂脸,其实实力弱得一批),也是在那个时候开始爱上了编程.因此在高考结束后就报了信息安全专业,哪怕那时候父母不是很支持我报跟计算机相关的专业.我认为我的起步条件会比一般的零基础的萌新稍微好那么一点点,但也就仅限于此了,毕竟有天赋的人比比皆是,他们只是缺少一个契机罢了,入门之后分分钟起飞的也是一大把,更不用说那些大牛博主了,他们的程序员

python学习:程序控制结构·作业20141219

Python学习:程序控制结构 20141219 编程环境: windows 7 x64 python 2.7.6 题目: 1 编写程序,完成下列题目(1分) 题目内容: 如果列出10以内自然数中3或5的倍数,则包括3,5,6,9.那么这些数字的和为23.要求计算得出任意正整数n以内中3或5的倍数的自然数之和. 输入格式: 一个正整数n. 输出格式: n以内中3或5的倍数的自然数之和. 输入样例: 10 输出样例: 23 时间限制:500ms内存限制:32000kb n = int(raw_in

团队编程项目作业

团队名称: 简单 队长 学号:2015035107224 姓名:张志鹏 成员 学号:2015035107071 姓名:邱阳阳 学号:2015035107044 姓名:刘孝东 学号:2015035107007 姓名:孙弘原 学号:2015035107005 姓名:刘文帅 学号:2015035107009 姓名:杨琳 团队编程项目作业名称:爬取豆瓣电影TOP250 选择该团队编程项目原因:感觉项目有意思

团队项目编程作业

团队名称: 简单 队长 学号:2015035107224 姓名:张志鹏 成员 学号:2015035107071 姓名:邱阳阳 学号:2015035107044 姓名:刘孝东 学号:2015035107007 姓名:孙弘原 学号:2015035107005 姓名:刘文帅 学号:2015035107009 姓名:杨琳 团队编程项目作业名称:爬取豆瓣电影TOP250 选择该团队编程项目原因:我爱学习

团队作业八——第二次团队冲刺(Beta版本)第6天

团队作业八--第二次团队冲刺(Beta版本)第5天 一.每个人的工作 (1) 昨天已完成的工作 简单模式逻辑代码涉及与相关功能的具体实现 (2) 今天计划完成的工作 修改完善注册登录内容界面,编辑错题文件写入. (3) 工作中遇到的困难 今天花了较多时间在完善登录注册界面上,这让我们比较担心,如果每天都花很多时间在解决之前的问题,当天的任务又做不好,会不会赶不上进度.如果每天都不能正常完美的完成每天任务,那冲刺最后一天结束的时候,又哪里再有一个明天给我们完善代码.且今天还遇到了写入SD存储卡文件

第四周作业(汇总)

本周作业: 1.对四则运算软件需求的获取方式进行实践,例如使用调查问卷访问相关关系人等. 答: 本次是借助“问卷星”网站来发布问卷进行调查的.问卷地址:https://sojump.com/jq/9942880.aspx 本次问卷针对学生.家长和老师三个对象进行调查,对 四则软件进行需求分析.问卷调查结束后,问卷星还提供数据分析服务. 2.采用四象限法将你小组的四则运算软件的需求功能进行分类.阐述其优势与不足. 3.尝试把四则运算软件需求进行分解,变为每个小组成员可执行的积压工作项,分配这些工作

个人作业-Week3:代码复审

软件工程师的成长 我在上大学之前,对于软件工程师之类并无概念,并且高初中的电脑课也从未提及过写代码之类的东西,更多的都是一些教一些办公软件的使用(笑,明明电脑课总是因为老师“有事”变成其他课,根本就没上过几节吧),来到大学后得知一些同学高中就开始搞各种竞赛后,我感到十分惊讶,什么,从小热爱学习XX,一路坚持,最终成为XX大师的人小说以外真的有啊.大学之后的课余时间更是鲜有与软件工程相挂钩的事情,用一句话概括,就是过着这些博主批判对象的生活,十分尴尬.选这个课就是觉得应该做出些改变了,然而在第一次

z作业二总结

这是我的第二次作业,之前在课上所学的我发现已经忘得差不多了,这次的作业让我做的非常累,感觉整个人生都不太好了. 作业中的知识点:int(整型) float(单精度) double(双精度) char(字符型) 任何变量都必须先定义后使用 变量=表达式注:左边必须是单个变量 printf—格式控制字符 普通字符:原样输出. 格式控制说明:按指定的格式输出数据,与数据类型有关 >:大于 <:小于 <=,>=小于等于,大于等于 ==:等于 !=:不等于 实验中遇到的困难:知识点基本上都忘

第四周作业

第四周作业 1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. (1)复制/etc/skel目录为/home/tuser1 [[email protected] ~]# cp -r /etc/skel/ /home [[email protected] ~]# mv /home/skel /home/tuser1 [[email protected] ~]# ll -a /home/tuser1/ total 2