#include<stdio.h>
#include<string>
#include<stdlib.h>
#define MAX 10
typedef struct Node
{
char cData[MAX];
struct Node *pNext;
}*Linklist;
int nChoice();
void vInitLink(Linklist *H1);//&H
void vCreatLinkHead(Linklist H1,char cLine[]);
void vChanceShow(Linklist H1);
void vShow(Linklist H1);
void vInLink(Linklist H1,int nPos,char cIn[]);
void vDelLink(Linklist H1,int nPos);
int main()
{
int nInPos;
int nDelPos;
int nOption;
Linklist H;
char cInData[MAX];
char cLetters[MAX];//链表节点个数可以不确定
nOption = 1;
while((nOption>0) && (nOption<7))
{
nOption = nChoice();
switch(nOption)
{
case 1:
vInitLink(&H);
printf("请输入字符串(以-1结束):\n");
while((scanf("%s",&cLetters) != EOF) && (strcmp(cLetters,"-1") != 0))//字符串不能用相等来表示=
{
vCreatLinkHead(H,cLetters);//&H这里H已经是指针了
}
vChanceShow(H);
break;
case 2:
while(printf("请输入要插入的位子(以-1结束):\n") && (1 == scanf("%d",&nInPos)) && (nInPos != -1))
{
printf("请输入要插入的值:\n");
scanf("%s",&cInData);
vInLink(H,nInPos,cInData);
vChanceShow(H);
}
break;
case 3:
while((printf("请输入要删除的位子(以-1结束):\n")) && (1 == scanf("%d",&nDelPos)) && (nDelPos != -1))
{
vDelLink(H,nDelPos);
vChanceShow(H);
}
break;
case 5:
vShow(H);
break;
case 6:
exit(0);
break;
default:
break;
}
}
return 0;
}
//选择函数
int nChoice()
{
int nOption;
printf("输入选项:\n1、创建数据\n2、插入数据\n3、删除数据\n4、查找数据\n5、输出数据\n6、退出\n");
scanf("%d",&nOption);
return nOption;
}
//初始化链表
void vInitLink(Linklist *H1)
{
*H1 = (Linklist)malloc(sizeof(Node));
(*H1)->pNext = NULL;
}
//创建链表(头插法)
void vCreatLinkHead(Linklist H1,char cLine[])
{
Node *pX;
pX = (Node*)malloc(sizeof(Node));
strcpy(pX->cData , cLine);
pX->pNext = H1->pNext;//i=0时,相当于pX->pNext = NULL;
H1->pNext = pX;
//free(pX);删除的时候才需要
}
//选择是否要显示数据(链表内容)
void vChanceShow(Linklist H1)
{
bool bIsShow;
printf("\n如果要看存储的内容,请输入1,否则输入0:\n");
scanf("%d",&bIsShow);
printf("\n");
if(1 == bIsShow)
{
vShow(H1);
}
}
//显示链表
void vShow(Linklist H1)
{
Node *pX;
pX = (Node*)malloc(sizeof(Node));
pX = H1;
while(pX->pNext != NULL)
{
pX = pX->pNext;
printf("%s\n",pX->cData);
}
printf("\n");
}
//插入节点(已知插入的位置和值)
void vInLink(Linklist H1,int nPos,char cIn[])
{
int i;
Node *pX,*pPre;
i = 0;
pPre = H1;
pX = (Node*)malloc(sizeof(Linklist));
while((pPre->pNext != NULL) && (i < nPos-1))
{
pPre = pPre->pNext;
i++;
}
if(i != nPos-1)
{
printf("插入位置有误!");
}
else
{
strcpy(pX->cData,cIn);
pX->pNext = pPre->pNext;
pPre->pNext = pX;
}
}
//删除节点(已知删除的位置)
void vDelLink(Linklist H1,int nPos)
{
int i;
Node *pX,*pPre;
i = 0;
pPre = H1;
pX = (Node*)malloc(sizeof(Linklist));
while((pPre->pNext !=NULL) && (i < nPos-1))
{
pPre = pPre->pNext;
i++;
}
if((i != nPos-1) || (pPre->pNext == NULL))
{
printf("删除位置有误\n\n");
}
else
{
pX = pPre->pNext;
pPre->pNext = pPre->pNext->pNext;
free(pX);
}
}
分享到:
相关推荐
基于springboot的java毕业&课程设计
基于springboot的java毕业&课程设计
【优化覆盖】算术算法求解传感器覆盖优化问题【含Matlab源码 2436期】.zip
【优化覆盖】蜣螂算法DBO求解无线传感器WSN覆盖优化问题【含Matlab源码 3567期】.zip
FusionCompute修改VRM节点IP地址 该任务指导工程师对VRM节点的IP地址、主机的管理IP地址进行修改。 执行该任务时应注意: • 建议同时修改VRM和主机的管理IP。如果修改了VRM的IP,会导致本地PC与VRM的连接短暂中断。 • 修改前应已完成网络规划,并在FusionCompute中确认VRM节点运行正常,所有主机运行正常(无处于异常或维护状态的主机)。 • 如果跨网段修改IP地址时,则应注意在完成所有节点IP地址的修改后,在相应的汇聚交换机进行配置,保证修改后的主机IP地址、VRM节点及本地PC之间能进行正常通信。相关交换机配置命令,请参考交换机配置样例。 • 如果跨网段修改管理IP地址,同时涉及修改管理VLAN,请先修改管理平面VLAN,待修改完成,且各节点与VRM网络通信正常后,再进行修改VRM IP地址和主机IP地址的操作。
基于springboot的java毕业&课程设计
MySQL8.4.0 LTS(mysql-server_8.4.0-1ubuntu22.04_amd64.deb-bundle.tar)适用于Ubuntu 22.04 Linux (x86, 64-bit)
【优化参数】遗传算法求解管道调节阀参数整定优化问题(含压力、阀门高度)【含Matlab源码 4165期】.zip
课设毕设基于SSM的汉服文化平台网站 LW+PPT+源码可运行.zip
基于springboot的java毕业&课程设计
基于springboot的java毕业&课程设计
java毕业设计 基于springboot Vue前后端分离自习室预约系统源码+使用文档+全部资料(优秀项目).zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。java毕业设计 基于springboot Vue前后端分离自习室预约系统源码+使用文档+全部资料(优秀项目).zipjava毕业设计 基于springboot Vue前后端分离自习室预约系统源码+使用文档+全部资料(优秀项目
最简单的 UDP-RTP 协议解析程序
人工智能换脸技术在近年来迅速发展,被广泛用于个人学习和娱乐目的。这项技术能够将一个人的脸部特征转移到另一个人的脸上,产生逼真的视觉效果。在学术界和工业界,AI换脸技术被用于电影特效、数字双胞胎生成和面部动画制作等领域。然而,对于普通用户而言,这项技术提供了一种有趣的方式来探索虚拟身份和玩转创意思维。 尽管AI换脸技术提供了令人惊叹的视觉效果,但也存在一些伦理和法律问题需要引起注意。特别是在隐私和虚假信息方面,滥用这项技术可能会导致潜在的风险和误解。因此,对于个人用户,使用AI换脸技术时需要保持理性和正确的态度,避免将其用于不当用途,包括欺骗、恶作剧或其他违法活动。 对于有需要的人群,希望他们能够理解AI换脸技术的局限性和使用范围。这项技术的目的在于推动科技发展和提升用户体验,但并非用于损害他人利益或伪造虚假信息。在个人学习和娱乐过程中,可以通过实践和研究更好地理解人工智能技术的潜力和局限性,促进技术的健康发展和应用。 总的来说,AI换脸技术作为一种前沿技术,为个人学习和娱乐提供了新颖且有趣的体验。然而,为了避免潜在风险和误解,用户应谨慎使用并遵循道德准则和法律规定。只有在合法、道
4.0 入住喷绘(转曲).cdr
基于springboot的java毕业&课程设计
【优化布局】免疫算法求解充电站最优布局【含Matlab源码 2539期】.zip
基于springboot的java毕业&课程设计
智慧藏文化博物馆建设方案PPT(79页)
基于springboot的java毕业&课程设计