线性表的子系统

/*  
* 程序的版权和版本声明部分:  
* Copyright (c) 2013,郑州大学SIAS国际学院  
* 文件名称:  线性表子系统
* 作    者:    王  杰
* 完成日期:2013 年 10 月 25 日    
* 对任务及求解方法的描述部分: 
* 输入描述:  详见代码及注释
* 问题描述:  详见代码及注释
* 程序输出:  详见代码及注释
* 问题分析:  详见代码及注释
* 算法设计:  详见代码及注释
*/
#include<stdio.h>
#include<stdlib.h>






typedef struct linknode
{  char data;
   struct linknode *next;
}linnode;
linnode *head;		//头指针
int n;		//定义表的长度








//定义建表函数1

void CreateList()
{  n=0;
   char x;
   linnode *p,*s;
   int z=1;
   head=new linnode;
   p=head;
   printf("\n请逐个输入结点,以x为结束标记!\n");
   printf("\n");
   while(z)
   {  printf("输入一个字符数据,并按回车:");
      scanf("%c",&x);
	  getchar();
	  if(x!='x'){
		s=new linnode;
		n++;
		s->data=x;
		p->next=s;
		s->next=NULL;
		p=s;
	  }
	  else z=0;
   }
}










//定义插入函数2

void InsList(int i,char x)
{  linnode *s,*p;
   p=head;
   int j=0;
   while(p!=NULL&&j<i)
   {  j++;
      p=p->next;
   }
   if(p!=NULL)
   {  s=new linnode;
      s->data=x;
	  s->next=p->next;
	  p->next=s;
	  n++;
   }
   else printf("\n线性表为空或插入位置超出!\n");
}









//定义删除函数3

void DelList(char x)
{  linnode *p,*q;
   if(head==NULL)
   {  printf("\n链表下溢!");		//不带头结点的空表
      return;
   }
   if(head->next==NULL)
   {  printf("\n线性表已经为空!");			//带头结点的空表
      return;
   }
   q=head;					//非空表,当还没有到表尾和还没有找到正确的值时,继续做循环,直到找到为止,找到后执行下一句
   p=head->next;				
   while(p!=NULL&&p->data!=x)
   {  q=p;
      p=p->next;
   }
   if(p!=NULL)			//如果在还没有到表尾的前提下,找到了,删除!
   {  q->next=p->next;
      delete p;
	  n--;
	  printf("\n结点 %c 已经被删除!",x);
   }
   else printf("\n抱歉!没有找到您要删除的结点。");				//如果已经到表尾了还没有找到,报错!,没有找到该节点
}











//定义显示函数4

void ShowList()
{  linnode *p=head;
   printf("\n显示线性表的所有元素:");
   if(head->next==NULL||p==NULL)		//空表
     printf("\n链表为空!");
   else
   {  printf("\n");
      while(p->next!=NULL)			//非空表,循环输出各个数据元素的数据域,直到p->next为空(表尾)时结束
      {  printf("%5c",p->next->data);
	     p=p->next;
	  }
   }
}










//定义查找函数5

void SearchList(char x)
{  linnode *p;
   int i=1;
   if(head==NULL)
   {  printf("\n链表下溢!");				//不带头结点的空表
      return;
   }
   if(head->next==NULL)
   {  printf("\n线性表为空,没有任何结点!");			//带头结点的空表
      return;
   }
   p=head->next;						//非空表,当还没有到表尾并且还没有找到值时,继续做循环
   while(p!=NULL && p->data!=x)
   {  p=p->next;
      i++;
   }
   if(p!=NULL)
     printf("\n在表的第 %d 位上找到值为 %c 的结点!",i,x);			//在不是表尾的前提下,找到了值,就输出
   else
	 printf("\n抱歉,未找到值为 %c 的结点!",x);					//表已经结束,还没有找到,报错。没有找到
}










//定义主函数

void main()
{  head=NULL;
   int choice,i,j=1;
   char x;
   while(j)
   {  printf("           线性表子系统          \n");
	  printf("*********************************\n");
	  printf("*        1------建    表        *\n");
	  printf("*        2------插    入        *\n");
	  printf("*        3------删    除        *\n");
	  printf("*        4------显    示        *\n");
	  printf("*        5------查    找        *\n");
	  printf("*        6------求 表 长        *\n");
	  printf("*        0------返    回        *\n");
	  printf("*********************************\n");
	  printf("  请选择输入的数字(0--6):");
	  scanf("%d",&choice);
	  getchar();
	  if(0<=choice<=6)
	  {	 if(choice==1)
			CreateList();
		 if(choice==2)
		 {  printf("\n请输入插入的位置i和插入的数据(输入格式:第i位后面,值为x):");
		    scanf("%d,%c",&i,&x);
		    InsList(i,x);
		 }
		 if(choice==3)
		 {  printf("\n请输入要删除的数据元素:");
			scanf("%c",&x);
			DelList(x);
		 }

		 if(choice==4)
			if(head==NULL)
				 printf("\n请先建立线性表!");
			else
				 ShowList();
		 if(choice==5)
		 {  printf("\n请输入要查找的数据元素:");
			scanf("%c",&x);
			SearchList(x);
		 }
		 if(choice==6)
			 printf("\n线性表长度为:%d",n);
		 if(choice==0)
			 j=0;
	  }
	  else
		printf("\n输入错误!请重新输入!");
   }
}

心得:就在这几天,突然对计算机又有了一些较深或者说更加贴切,亲近的赶脚,那种赶脚很是美妙。

总结:这个子系统写了很长时间,在写的时候稍微有一点无所适从,数据结构的内容,各个函数的核心算法都很是理解,但是在考虑整体的时候  有那么一点无从下手的赶脚,细心地想想,可能就是因为写的不多,还没有让 编程成为一种惯性吧,所以还要继续的做题,不管是简单的还是复杂的,现在就是在找那个赶脚。由难而易,循序渐进,逐步提升自己的水平,相信用不了几天 ,就可以熟门熟路了,慢慢的过渡到复杂的有难度的题目上!   干吧得!!!

感悟:持之以恒者,必成大器

内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值