前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >作业(3)

作业(3)

作者头像
py3study
发布2020-01-14 12:20:27
5150
发布2020-01-14 12:20:27
举报
文章被收录于专栏:python3

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

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

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

1、int(*p)[3];------ptr为指向含3个元素的一维×××数组的指针变量(是指针)

2、int *p[3];-------定义指针数组p,该数组由3个指向整型数据的指针元素组成(是数组)

3、int(*)[3];--------实际上可以看作是一种数据类型。也就是第一个(int(*p)[3])中定搜索义的p的数据类型

* 在C语言里称为指针运算符,它用来获取所指地址的具体内容。

ptr是个地址,*ptr 取得该地址处存储的变量的值

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

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

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

源代码:

#include   #include   #include   #include #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   {      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("没有查找到该数据!"); };i++) .h>.h>.h>.h>

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();       }    } }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/07/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档