C++中的求链表长度求指教啊!!!

当前访客身份:游客 [
当前位置:
发布于 日 17时,
完整的代码,用C++实现了单链表
代码片段(1)
LinkList.cpp&~&7KB&&&&
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
/* 定义 */
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
/* 别名定义
typedef int S
typedef int ElemT
/* 单链表存储结构 */
typedef struct Node
/* 数据域 */
struct Node *
/* 指针域 */
typedef struct Node *LinkL
/* 定义LinkList */
/* 单链表初始化 */
Status InitList(LinkList *L)
*L = (LinkList)malloc(sizeof(Node));
/* 产生头结点,并使L指向次头结点 */
if (!(*L))
/* 存储分配失败 */
return ERROR;
(*L)-&next=NULL;
/* 指针域为空 */
return OK;
/* 初始条件:单链表已存在。操作结果:返回L中数据元素个数 */
int ListLength(LinkList L)
int i = 0;
LinkList p = L-&
/* p指向第一个结点 */
/* 初始条件:单链表L已存在, 1&= i &= ListLength(L) */
/* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */
Status ListInsert(LinkList *L, int i, ElemType e)
LinkList p,
while (p && j & i)
/* 寻找第i个结点 */
if (!p || j & i)
/* 第i个元素不存在 */
return ERROR;
s = (LinkList)malloc(sizeof(Node));
/* 生成新结点(C语言标准函数) */
s-&data=e;
s-&next=p-&
/* 将p的后继结点赋值给s的后继结点 */
p-&next=s;
/* 将s赋值给p的后继结点 */
return OK;
/* 遍历链表时显示函数 */
Status visit(ElemType c)
printf("%d",c);
return OK;
/* 初始条件:单链表L已存在 */
/* 操作结果:依次对L的每个数据元素输出 */
Status ListTraverse(LinkList L)
LinkList p = L-&
visit(p-&data);
printf("\t");
printf("\n");
return OK;
/* 初始条件:单链表L已存在 */
/* 操作结果:若L为空表,则返回TRUE,否则返回FALSE */
Status ListEmpty(LinkList L)
if (L-&next)
return FALSE;
return TRUE;
/* 初始条件:单链表L已存在 */
/* 操作结果:将L重置为空表 */
Status ClearList(LinkList *L)
LinkList p,
p = (*L)-&
/* p指向第一个结点 */
/* 没到表尾 */
(*L)-&next = NULL; /* 头结点指针域置为空 */
return OK;
/* 初始条件:单链表已存在,且1 &= i &= ListLength */
/* 操作结果:用e返回第i个数据元素的值 */
Status GetElem(LinkList L,int i, ElemType *e)
/* 声明一结点p */
p = L-& /* 让p指向链表L的第一个结点 */
/* j为计数器 */
while (p && j & i)
/* p不为空,或者计数器j还没有等于i时,循环继续 */
/* 让p指向下一个结点 */
if (!p || j & i)
/* 第i个元素不存在 */
return ERROR;
/* 取第i个元素的数据 */
return OK;
/* 初始条件:单链表L已存在 */
/* 操作结果:返回L中第1个与与e满足关系的元素的下标;若没找到,则返回0 */
int LocateElem(LinkList L, ElemType e)
int i = 0;
LinkList p = L-&
if (p-&data == e) /* 找到了该数据元素 */
/* 初始条件:单链表已存在,且1 &= i &= ListLength */
/* 操作结果:删除L中的第i个数据元素,并且用e返回其值,L的长度减1 */
Status ListDelete(LinkList *L, int i, ElemType *e)
LinkList p,
while (p-&next && j & i)
/* 遍历寻找第i个元素 */
if (!(p-&next) || j & i)
return ERROR;
/* 第i个元素不存在 */
p-&next = q-&
/* 标准删除语句,把q的后继结点赋值给p的后继结点 */
/* 将q结点中的数据返回给e */
return OK;
/* 头插法:随机产生n个元素的值,建立带头结点的单链线性表. */
void CreateListHead(LinkList *L, int n)
srand(time(0));
/* 初始化随机数种子 */
*L = (LinkList)malloc(sizeof(Node));
(*L)-&next=NULL; /* 首先创建一个带头结点的单链表 */
for (i = 0; i & i++)
p = (LinkList)malloc(sizeof(Node));
/* 生成新结点 */
p-&data=rand()%100 + 1;
/* 随机生成100以内的数字 */
p-&next = (*L)-&
(*L)-&next =
/* 插入到表头 */
/* 尾插法:随机产生n个元素的值,建立带表头结点的单线性链表. */
void CreateListTail(LinkList *L, int n)
LinkList p,
srand(time(0));
/* 初始化随机数种子 */
*L = (LinkList)malloc(sizeof(Node)); /* L为整个线性表 */
/* r为指向尾部的结点 */
for (i = 0; i & i++)
p = (LinkList)malloc(sizeof(Node));
/* 生成新结点 */
p-&data=rand() % 100 + 1;
/* 随机生成100以内的数字 */
/* 将表尾终端结点的指针指向新结点 */
/* 将当前新结点定义为表尾终端结点 */
r-&next = NULL;
/* 表示当前链表结束 */
/* 测试方法,主函数 */
int main()
LinkList L;
i = InitList(&L);
printf("初始化L后:ListLength = %d\n",ListLength(L));
for (j = 1; j &= 5; j++)
i = ListInsert(&L,1,j);
printf("在L的表头依次插入1~5后:L-&data = ");
ListTraverse(L);
printf("ListLength(L) = %d \n",ListLength(L));
i = ListEmpty(L);
printf("L是否为空 (1:是 0:否):i = %d \n",i);
i = ClearList(&L);
printf("清空L后:ListLength(L) = %d \n",ListLength(L));
i = ListEmpty(L);
printf("L是否为空 (1:是 0:否):i = %d \n",i);
for (j = 1; j &= 10; j++)
i = ListInsert(&L,j,j);
printf("在L的表头依次插入1~5后:L-&data = ");
ListTraverse(L);
printf("ListLength(L) = %d \n",ListLength(L));
ListInsert(&L,1,0);
printf("在L的表头插入0后:L-&data = ");
ListTraverse(L);
printf("ListLength(L) = %d \n",ListLength(L));
GetElem(L,5,&e);
printf("第5个元素的值为:%d \n",e);
for (j = 3; j &= 4; j++)
k = LocateElem(L,j);
printf("第%d个元素的值为:%d \n",k,j);
printf("没有值为%d的元素. \n",j);
printf("ListLength(L) = %d \n",ListLength(L));
k = ListLength(L);
/* K为表长 = 11 */
for (j = k + 1; j &= j--)
i = ListDelete(&L,j,&e); /* 删除第j个数据元素 */
if (i == 0)
printf("删除第%d个数据元素失败. \n");
printf("删除第%d个元素的值为:%d \n",j,e);
printf("依次输出L中的元素:");
ListTraverse(L);
printf("ListLength(L) = %d \n",ListLength(L));
ListDelete(&L,j,&e);
/* 删除第5个数据元素 */
printf("删除第%d个元素的值为:%d \n",j,e);
printf("依次输出L中的元素:");
ListTraverse(L);
printf("ListLength(L) = %d \n",ListLength(L));
i = ClearList(&L);
printf("L是否为空 (1:是 0:否):i = %d \n",i);
printf("清空L后:ListLength(L) = %d \n",ListLength(L));
CreateListHead(&L,20);
printf("整体创建L的元素(头插法): ");
ListTraverse(L);
i = ClearList(&L);
printf("L是否为空 (1:是 0:否):i = %d \n",i);
printf("清空L后:ListLength(L) = %d \n",ListLength(L));
CreateListTail(&L,20);
printf("整体创建L的元素(尾插法): ");
ListTraverse(L);
system("pause");
开源中国-程序员在线工具:
相关的代码(297)
你确定这是C++不是C?
2楼:Fanze 发表于
C++为何不用模板?
3楼:DeathRP 发表于
我觉得不是每个人都用vs的,还有,c的语句本来就可以在c++ 里用,有什么错
4楼:dujp 发表于
个人感觉除非调用c的函数库,否则还是不要把c和c++混着用比较好,两者的编程风格不同,每个语言表现的思想也不同。如果不喜欢模版可以在c++里不用模版。如果喜欢c那么就用纯的c,如果喜欢c++,那么就保持c++规范。
5楼:选择了影魔 发表于
6楼:OscerSong 发表于
7楼:RogerLee 发表于
你确定这是C++
为什么用malloc不用new?
开源从代码分享开始
oobigo的其它代码欢迎来到传智播客公开课
温馨提示:使用论坛账号可直接登录
没有账号?
使用第三方账号登录 &
解锁/找回密码
输入您的用户名:
输入注册时填写的邮箱:
您好!您可以在线提交免费试听申请,审核通过获得试听券后,可在3天内免费体验全平台所有正在直播的远程班。
温馨提示:
远程班直播时间为9:00-18:00
若您是在校大学生,可以先进行大学生认证,认证成功后您可申请免费试听5天。
公开课报名申请
报名课程:
真实姓名:
您的状态:
在读大学生
报名后您将在开课前收到短信提醒,公开课结束后还可以下载本课程的视频!每日晚20:00,我们与您相约传智播客公开课!
远程班报名申请
报名课程:
真实姓名:
报名后您将在开课前收到短信提醒,公开课结束后还可以下载本课程的视频!每日晚20:00,我们与您相约传智播客公开课!
温馨提示:初次使用听课券即代表启用
输入课程听课券:
欢迎来到传智播客公开课!
指针和链表在项目开发中的实战应用
课程介绍:
指针是C语言的精华,是C/C++语言的重点和难点。指针是初学者头痛的话题,是初级程序员入门C/C++领域的必经之路;如何学习指针,如何理解指针在项目开发中的应用。本期课程剖析一级指针、二级指针、三级指针的经典用法......
开课时间:日20点
(已有432人报名)
最新资讯:
【课程导语】C/C++语言发展至今已经有近40年历史,是目前应用广泛的编程语言,它广泛应用于网络、通讯、图像、游戏、硬件驱动、大数据、嵌入式等行业。C/C++入门难。如何解决入门难,如何通过指针和链表探视C/C++在企业的应用情况呢?【识点介绍】1)学习指针的标准和指针知识体系搭建&2)一级指针典型用法&3)&&二级指针的内存模型和典型用法&4)三级指针的典型用法&5)普通链表的设计与实现&6)非传统链表的设计与实现&&7)企业链表的设计与现实&&8)基于C++模板链表的设计与实现&【本月C++公开课】1月05号&&1月06号&1月14号& 【王老师经典语录】1)指针也是一种数据类型,指针的数据类型是指它所指向内存空间的数据类型2)间接赋值*p是指针存在的最大意义&3)理解指针必须和内存四区概念相结合&4)应用指针必须和函数调用相结合(指针做函数参数)指针是子弹,函数是枪管;子弹只有沿着枪管发射才能显示它的威力;指针的学习重点不言而喻了吧。接口的封装和设计、模块的划分、解决实际应用问题;它是你的工具。5)指针指向谁就把谁的地址赋给指针&6)指针指向谁就把谁的地址赋给指针,用它对付链表轻松加愉快7)链表入门的关键是分清楚链表操作和辅助指针变量之间的逻辑关系8)C/C++语言有它自己的学习特点;若java语言的学习特点是学习、应用、上项目;那么C/C++语言的学习特点是:学习、理解、应用、上项目。多了一个步骤吧。9)学好指针才学会了C语言的半壁江山,另外半壁江山在哪里呢?你猜,精彩剖析在课堂。【你可以加以下老师找到人生的方向哦】【资料获取】QQ账号:& &加这位老师获取你需要的资料哦!C/C++技术交流1000人群:
讲师:传智.扫地僧
毕业于山东大学,计算机硕士。具有10年项目开发经验,事业部技术总监,长期一线项目经理和企业内训培训师。热爱技术传播事业,较强技术研发和工程技术攻坚能力。
多年信息安全行业软件研发、项目管理经验。主持开发过的项目,涉及银行、政府、证券、企业信息系统安全规划等应用领域。金融银行类:项目核心研发人员和技术专家角色,参与中国建设银行密码服务平台项目和中国建设银行新一代安全架构相关项目,中国邮储银行安全架构相关项目等;政府安全基础设施类:项目经理角色,承建广东数字证书认证中心、广东电子商务认证中心CA项目等;国企及集团信息系统安全规划类:项目经理角色,为国内数十家企业信息系统进行安全加固和资源整合。
热爱IT培训,多年企业内训培训师;讲课深入浅出。在多年的一线项目实战中,不断积累,总结出自己的一套培训方法,擅长将项目实现思路和具体编程技能相结合。深受学生和企业内训员工的好评。
传智播客-专业java培训、.net培训、php培训、iOS培训、C++培训、网页设计、平面设计、网络营销培训机构
地址:北京市昌平区建材城西路金燕龙办公楼一层 邮编:100096
电话:010-/70 传真:010- 邮箱:
京ICP备号 京公网安备
友情链接:
交换友情链接联系QQ:
手机扫一扫资料早拿到

我要回帖

更多关于 c语言中链表 的文章

 

随机推荐