该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

(VC6.0环境下的编译)这个程序基本功能就是输入信息,然后可以浏览输入的信息,进行删除和插入操作。在链表插入函数中我有一个错误struct student *stu 这条语句编译时警告,我本意时用它做插入点,但系统提示必须事先定义一个struct student 型的变量然后将其地址*stu作为参数传入insert(p,stu)函数但是我无法解决这个问题。另外,在函数调用时也出现问题。当执行第一次main函数后,再次调用就失灵了。不知道哪里出现问题了。请教高手予以指点。一定感激万分!!!!或者提供方向,再次谢过了。。。

#include

#include

#include

#include

#define NULL 0

#define LEN sizeof(struct student)

struct student

{   char name[10];

int num;

int age;

struct student *next;

};

int n;char ch;/*全局变量*/

struct student *creat(void)/*定义函数,返回一个指向表头的指针*/

{

struct student *head;

struct student *p1,*p2;

n=0;

p1=p2=(struct student *)malloc(LEN);/*开辟新单元*/

scanf("%s %d %d",p1->name,&p1->num,&p1->age);

head=NULL;

while(strcmp(p1->name,"NULL"))

{

n++;

if(n==1)head=p1;

else p2->next=p1;

p2=p1;

p1=(struct student *)malloc(LEN);

scanf("%s %d %d",p1->name,&p1->num,&p1->age);/*结束输入时,必须输入两次空值:NULL */

}

p2->next=NULL;

return(head);

}

struct student *del(struct student *p)/*定义删除链表函数,返回一个处理过的链表头指针*/

{  printf("***********下面进行删除操作***********\n");

struct student *p1,*p2;int num;printf("输入要删除的学生的学号\n");scanf("%d",&num);

if(p==NULL)

p1=p;

while(num!=p1->num&&p->next!=NULL)/*p1不是所要找的结点,并且后面还有结点*/

{p2=p1;p1=p1->next;}/*p1后移一个结点*/

if(num==p->num)/*通过学号找删除结点,找到了*/

{

if(p1==p)p=p1->next;/*若p1指向首结点,

则把第二个结点的地址赋给p*/

else p2->next->next;/*若不是首个结点,则将下一结点的地址赋给前一结点p2*/

printf("deleted the:%d\n",num);

n=n-1;

}

else printf("%d id not be found!!\n",num);/*找不到该结点*/

return(p);

}

struct student *insert(struct student *p)/*定义插入函数,返回指针值*/

{   struct student *stu;scanf("%s %d %d",stu->name,stu->num,stu->age);

struct student *p0,*p1,*p2;

p0=stu;/*p0指向要插入的指针*/

p1=p;/*将首结点指针赋给p1*/

if(p==NULL)

{p=p0;p0->next=NULL;}/*如果是空表,将首元素的地址变为p0*/

else

{

while((p0->num>p1->num)&&(p1->next!=NULL))

{

p2=p1;/*让p2指向p1刚才指向的结点*/

p1=p1->next;}/*p1指向下一个结点*/

if(p0->num<=p1->num)

{

if(p==p1)p=p0;/*插到原来第一个结点之前*/

else p2->next=p0;/*插到p2结点之后*/

p0->next=p1;}/*这样就成功插入p1和p2结点之间*/

else

{p1->next=p0;p0->next=NULL;}/*作为最后一个结点插入*/

}

n=n+1;/*增加一个结点*/

return(p);

}

void print(struct student *p)/*定义输出函数*/

{   printf("********您所输入的学生信息*********\n");

while(p)

{

printf("Name:%s   Num:%d   Age:%d   \n",p->name,p->num,p->age);

p=p->next;

}

}

void main(struct student *p)/*定义主调函数*/

{

system("cls");

printf("********************************\n******  1:输入学生信息  *******\n******  2:查看学生信息  *******\n******  3:删除信息      *******\n******  4:插入操作      *******\n********************************\n");

printf("请输入操作代码(退出输入5):");

ch=getchar();

if(ch=='1')main(creat());

else if(ch=='2'){print(p);printf("返回:1;退出:2\n");if((ch=getchar())=='1')main(p);else exit(1);}

else if(ch=='3')main(insert(p));

else if(ch=='4')main(del(p));

else exit(1);

}

c语言 链表怎么调用,求教!!!链表,函数调用高手进!!!相关推荐

  1. C语言程序设计 细节总结(链表)

    12 链表 12.1 链表概述 1.采用动态存储分配的一种重要数据结构,一个链表中存储的是一批同类型的相关联数据 2.动态分配时,每个结点之间可以不连续,结点之间的联系可以用指针实现,每个结点分两个域 ...

  2. C语言游戏传递小秘密,C语言的那些小秘密之链表

    大多数的读者在学习编程语言的时候都不喜欢那些枯燥的文字描述,包括我自己在开始学习编程的时候也是这样,对于代码的热情远远高于文字,所以我在我写东西的时候也不喜欢用枯燥的文字描述来向读者讲解,更喜欢用代码 ...

  3. c语言如何输出整串链表,大神帮我看一下怎么输入输出一个链表,我输入了但是没输出啊...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include //malloc头文件 struct Student //定义结构体 { int num; stru ...

  4. 队列的C语言实现(通过内核链表)

    0. 环境说明 本文的实验环境是: win7操作系统+Keil 5 IDE. 非常适合嵌入式软件开发 1. 打造自己的"list.h" 在单片机程序开发中,有时候会用到队列.能否设 ...

  5. C语言从已排序的链表中删除重复项(附完整源码)

    C语言从已排序的链表中删除重复项 C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) #include ...

  6. 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)

    线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...

  7. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

  8. c语言实现两个有序链表的合并(代码示例)

    c语言实现两个有序链表的合并: 现有两个有序单链表,通过代码实现将两个单链表合并为一个有序的新表,要求使用旧表的空间,不能新分配内存 #include #include typedef struct ...

  9. c语言单链表功能,[数据结构]单链表(C语言)的各种功能

    06-03阅读200,000 + 链表是一种常见的基本数据结构,在此充分利用了结构指针. 链表可以动态存储和分配,即链表是一个功能非常强大的数组. 他可以在节点中定义多种数据类型,并可以根据需要随意添 ...

  10. c语言单链表设计报告,单链表实验报告

    <数据结构>实验报告二 分校: 学号: 日期: 班级: 姓名: 程序名: L2311.CPP 一.上机实验的问题和要求: 单链表的查找.插入与删除.设计算法,实现线性结构上的单链表的产生以 ...

最新文章

  1. 代码参数里的 payload 究竟是什么意思
  2. JavaScript 动态加载脚本和样式的方法
  3. NumberUtils源码分析
  4. java编译器代码检查_java 命名代码检查-注解处理器
  5. 计算机常用的数制及编码
  6. CRM、DMP、CDP的区别
  7. 99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏!!!...
  8. if name==main是什么意思_Python中if __name__ == quot;__main__quot;:是什么意思
  9. GitLab容器注册服务已集成于Docker容器
  10. jfinal解决跨域(eova和jfinal)
  11. 15-传输层协议和应用层协议
  12. oracle-in/exists
  13. HDU 5745 La Vie en rose 暴力
  14. java实现区块链_用Java实现一个简单的区块链
  15. 黑色渐变遮罩html,巧用CSS遮罩
  16. CVE-2017-0199漏洞分析
  17. 聊聊iClient for Leaflet坐标转换问题
  18. 可视化界面:Activity 详解
  19. 豆瓣电影Top250——电影详细
  20. 最强文献下载神器——SCI-HUB客户端v7.0

热门文章

  1. 指纹识别技术相比于其它生物识别技术,有哪些优缺点?
  2. FaWave恢复twitter的办法
  3. 网店营销成为运营商营销的重要平台
  4. igs时间和utc_世界协调时间(UTC)与中国标准时间
  5. 老Java程序员花2天写了个连连看,我竟连不过我女儿,我了个去!
  6. 我的感慨——渴望爱与安定 喜欢云淡风轻!
  7. 简单PHP会话(session)说明
  8. win7安装android驱动失败怎么办,win7未能成功安装设备驱动程序怎么办
  9. linux服务器之间的文件同步(双向同步unison+inotify)
  10. WinAircrackPack无线破解