第三节课作业150206309

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

我们知道,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-10-14 00:55:19

第三节课作业150206309的相关文章

第三节课作业

1 指针是一个存储计算机内存地址的变量.从指针指向的内存读取数据称作指针的取值.指针可以指向某些具体类型的变量地址,例如int.long和double.指针也可以是void类型.NULL指针和未初始化指针. 根据出现的位置不同,操作符 * 既可以用来声明一个指针变量,也可以用作指针的取值.当用在声明一个变量时,*表示这里声明了一个指针.其它情况用到*表示指针的取值. 链表由一系列不必在内存中相连的结构组成.每一个结构均含有表元素和指向包含该元素后继元的结构指针.我们称之为next指针.最后一个单

第三节课作业——指针

1.指针与数组 指针通常指向一片储存空间,而开辟的储存空间地址为指针的量:数组开辟的是一段连续的内存空间,而指针则是单一特定内存地址,因此两者不可互相转换. 数组变量可以赋值给指针(即将数组第一个变量的地址赋予指针). 2.动态内存分配与静态内存分配 (1)动态内存分配 根据程序的需要开辟空间,不需要预先分配,智能自动,可以根据需要增大或减小. (2)静态内存分配 即预先分配好储存空间,缺点显而易见,需要预先知道数据的大小,修改数据的时候需要更改已经分配好的储存空间,浪费内存等. (3)函数 v

第三节课作业电信15-2lhz150206227

学习c语言指针和链表的体会 1.指针.引用和取值 指针:指针是一个存储计算机内存地址的变量.从指针指向的内存读取数据称作指针的取值.指针可以指向某些具体类型的变量地址,例如int.long和double.指针也可以是void类型.NULL指针和未初始化指针. 定义(声明)指针变量: int*ptr; 给变量引用一个地址: ptr =&val; 对指针变量取值: int deref =*ptr; 2.指针和数组 数组:数组表示一段连续的内存空间,用来存储多个特定类型的对象. 指针:指针用来存储单个

信管师培训之第十三节课作业(战略管理+业务流程管理+知识管理)

一.战略管理1.企业战略的特点有哪些? (1).全局性 (2).长远性 (3).抗争性 (4).纲领性 2.企业战略决策的特点有哪些?(1).决策的对象是复杂的,很难把握住它的结构,并且是没有先例的,对其处理上也是没有经验可循. (2).面对的问题常常是突发性的.难以预料的.所依靠的是来自外部的关于未来如何变化的很少的情报. (3).决策的性质直接涉及到企业的前途. (4).评价困难,难以标准化. 3.战略管理分为哪三步?(记) 战略管理分为战略制定.战略执行和战略评估三个步骤. 4.组织的使包

C语言课程设计第三节课作业刘子威

1 指针的概念分解      指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 1.指针的类型2.指针所指向的类型3.指针的值或者叫指针所指向的内存区4.还有指针本身所占据的内存区 学习C语言动态内存分配 对于指针,正确的分配动态内存是十分重要的,本文将着重阐述动态内存分配函数malloc,calloc,realloc以及memset的用法. 一.对于malloc,在终端输入 #:man  malloc可以知道函数原型是: Void

数据结构课作业系列

数据结构课作业-----顺序表 1 /**************************** 2 3 程序名称:简单电话号码查询系统 V.0.1 4 主要功能:简单联系人录入,查找,排序..... 5 主要结构:静态数组类链表 6 7 **************************/ 8 9 #include <cstdio> 10 #include <cstring> 11 #include <iostream> 12 #include <algorit

基于案例SQL优化第九课作业分享

默认统计信息收集: 1. 11g默认启动了统计信息收集的任务,默认运行时间是周一到周五晚上10点和周6,周天的早上6点 2. 你也可以关闭自动统计新收集任务,选择手工收集的方式,但是一般不建议这样操作. 动态统计信息: 1. 统计信息默认情况下是每天晚上10点半后收集,如果新建对象还没来得级收集统计信息,就采用动态采样的方式. 2. 具体在set autotrace 跟踪的执行计划中,可以看到类似:- dynamic sampling used for this statement (level

centos mysql 优化 第二十三节课

centos mysql  优化  第二十三节课 f

centos mysql 优化 第十三节课

centos mysql  优化  第十三节课 MySQL索引 主键值不能重复,也不能是NULLunique key + not null 业务主键用唯一索引代替 案例:某InnoDB表,没有自增列主键,使用一段时间后,产生碎片,重整表空间后,从13G变成了9G重整表空间的3种方法alter table xx engine=innodb;optimize table xx;create primary key on id 加主键聚集索引 mysql5.6之后依然无法online ddl做 加主键