c语言 链表怎么调用,求教!!!链表,函数调用高手进!!!
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
(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语言 链表怎么调用,求教!!!链表,函数调用高手进!!!相关推荐
- C语言程序设计 细节总结(链表)
12 链表 12.1 链表概述 1.采用动态存储分配的一种重要数据结构,一个链表中存储的是一批同类型的相关联数据 2.动态分配时,每个结点之间可以不连续,结点之间的联系可以用指针实现,每个结点分两个域 ...
- C语言游戏传递小秘密,C语言的那些小秘密之链表
大多数的读者在学习编程语言的时候都不喜欢那些枯燥的文字描述,包括我自己在开始学习编程的时候也是这样,对于代码的热情远远高于文字,所以我在我写东西的时候也不喜欢用枯燥的文字描述来向读者讲解,更喜欢用代码 ...
- c语言如何输出整串链表,大神帮我看一下怎么输入输出一个链表,我输入了但是没输出啊...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include //malloc头文件 struct Student //定义结构体 { int num; stru ...
- 队列的C语言实现(通过内核链表)
0. 环境说明 本文的实验环境是: win7操作系统+Keil 5 IDE. 非常适合嵌入式软件开发 1. 打造自己的"list.h" 在单片机程序开发中,有时候会用到队列.能否设 ...
- C语言从已排序的链表中删除重复项(附完整源码)
C语言从已排序的链表中删除重复项 C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) #include ...
- 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
- c语言实现两个有序链表的合并(代码示例)
c语言实现两个有序链表的合并: 现有两个有序单链表,通过代码实现将两个单链表合并为一个有序的新表,要求使用旧表的空间,不能新分配内存 #include #include typedef struct ...
- c语言单链表功能,[数据结构]单链表(C语言)的各种功能
06-03阅读200,000 + 链表是一种常见的基本数据结构,在此充分利用了结构指针. 链表可以动态存储和分配,即链表是一个功能非常强大的数组. 他可以在节点中定义多种数据类型,并可以根据需要随意添 ...
- c语言单链表设计报告,单链表实验报告
<数据结构>实验报告二 分校: 学号: 日期: 班级: 姓名: 程序名: L2311.CPP 一.上机实验的问题和要求: 单链表的查找.插入与删除.设计算法,实现线性结构上的单链表的产生以 ...
最新文章
- 代码参数里的 payload 究竟是什么意思
- JavaScript 动态加载脚本和样式的方法
- NumberUtils源码分析
- java编译器代码检查_java 命名代码检查-注解处理器
- 计算机常用的数制及编码
- CRM、DMP、CDP的区别
- 99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏!!!...
- if name==main是什么意思_Python中if __name__ == quot;__main__quot;:是什么意思
- GitLab容器注册服务已集成于Docker容器
- jfinal解决跨域(eova和jfinal)
- 15-传输层协议和应用层协议
- oracle-in/exists
- HDU 5745 La Vie en rose 暴力
- java实现区块链_用Java实现一个简单的区块链
- 黑色渐变遮罩html,巧用CSS遮罩
- CVE-2017-0199漏洞分析
- 聊聊iClient for Leaflet坐标转换问题
- 可视化界面:Activity 详解
- 豆瓣电影Top250——电影详细
- 最强文献下载神器——SCI-HUB客户端v7.0
热门文章
- 指纹识别技术相比于其它生物识别技术,有哪些优缺点?
- FaWave恢复twitter的办法
- 网店营销成为运营商营销的重要平台
- igs时间和utc_世界协调时间(UTC)与中国标准时间
- 老Java程序员花2天写了个连连看,我竟连不过我女儿,我了个去!
- 我的感慨——渴望爱与安定 喜欢云淡风轻!
- 简单PHP会话(session)说明
- win7安装android驱动失败怎么办,win7未能成功安装设备驱动程序怎么办
- linux服务器之间的文件同步(双向同步unison+inotify)
- WinAircrackPack无线破解