单链表各种操作,VS2013+番茄插件写着真爽

本文深入解析单链表的基本概念,并详细介绍了单链表类的定义、构造函数、添加元素、遍历、查找、删除、插入等核心操作的方法实现,通过实例代码演示了单链表的操作流程。
//************************************************************************
//    链表的各种操作2
//************************************************************************

//第一步,定义节点类
template<class T>
class slistNode
{
public:
	slistNode(){ next = NULL; }//初始化
	T data;//值
	slistNode* next;//指向下一个节点的指针
};

//第二步,写单链表类的声明,包括属性和方法。
template<class T>
class myslist
{
private:
	unsigned int listlength;
	slistNode<T>* node;//临时节点
	slistNode<T>* lastnode;//尾结点
	slistNode<T>* headnode;//头节点
public:
	myslist();//初始化
	unsigned int length();//链表元素的个数
	void add(T x);//表尾添加元素
	void traversal();//遍历整个链表并打印
	bool isEmpty();//判断链表是否为空
	slistNode<T>* find(T x);//查找第一个值为x的节点,返回节点的地址,找不到返回NULL
	void Delete(T x);//删除第一个值为x的节点
	void insert(T x, slistNode<T>* p);//在p节点后插入值为x的节点
	void insertHead(T x);//在链表的头部插入节点

};

//第三步,写构造函数,初始化链表类的属性。
template<class T>
myslist<T>::myslist()
{
	node = NULL;
	lastnode = NULL;
	headnode = NULL;
	listlength = 0;
}

//第四步,实现add()方法。
template<class T>
void  myslist<T>::add(T x){
	node = new slistNode<T>();
	node->data = x;
	if (lastnode == NULL){
		headnode = node;
		lastnode = node;
	}
	else{
		lastnode->next = node;
		lastnode = node;
	}
	++listlength;
}

//第五步,实现traversal()函数,遍历并输出节点信息。
template<class T>
void myslist<T>::traversal(){
	node = headnode;
	while (node!=NULL)
	{
		cout << node->data << ' ';
		node = node->next;
	}
	cout << endl;
}

//第六步,实现isEmpty()函数,判断链表是否为空,返回真为空,假则不空。
template<class T>
void myslist<T>::isEmpty(){
	return listlength == 0;
}

//第七步,实现find()函数。

template<class T>
slistNode<T>* myslist<T>::find(T x){
	node = headnode;
	while (node!=NULL && node->data!=x)
	{
		node = node->next;
	}
	return node;
}

//第八步,实现delete()函数,删除第一个值为x的节点
template<class T>
void myslist<T>::Delete(T x){
	slistNode<T> * temp = headnode;
	if (temp == NULL){
		return;
	}
	if (temp->data == x){
		headnode = temp->next;
		if (temp->next == NULL){
			lastnode = NULL;
		}
		delete(headnode);
	}
	while (temp->next!=NULL &&	temp->next->data!=x ){
		temp = temp->next;
	}
	if (temp->next == NULL){
		return;
	}
	if (temp->next == lastnode){
		lastnode = temp;
		delete(temp->next);
		temp->next = NULL;
	}
	else{
		node = temp->next;
		temp->next = node->next;
		delete(node);
		node = NULL;
	}

}

//第九步,实现insert()和insertHead()函数,在p节点后插入值为x的节点。
template<class T>
void myslist<T>::insertHead(T x){
	node = new slistNode<T>();
	node->data = x;
	node->next = headnode;
	headnode = node;
}

template<class T>
void myslist<T>::insert(T x, slistNode<T>* p){
	if (p == NULL){
		return;
	}
	node = new slistNode<T>();
	node->data = x;
	node->next = p->next;
	p->next = node;
	if (p->next == NULL){
		lastnode = node;
	}
}

一、 内容概要 本资源提供了一个完整的“金属板材压弯成型”非线性仿真案例,基于ABAQUS/Explicit或Standard求解器完成。案例精确模拟了模具(凸模、凹模)与金属板材之间的接触、压合过程,直至板材发生塑性弯曲成型。 模型特点:包含完整的模具-工件装配体,定义了刚体约束、通用接触(或面面接触)及摩擦系数。 材料定义:金属板材采用弹塑性材料模型,定义了完整的屈服强度、塑性应变等真实应力-应变数据。 关键结果:提供了成型过程中的板材应力(Mises应力)、塑性应变(PE)、厚度变化​ 云图,以及模具受力(接触力)曲线,完整再现了压弯工艺的力学状态。 二、 适用人群 CAE工程/工艺工程:从事钣金冲压、模具设计、金属成型工艺分析与优化的专业人员。 高校生:学习ABAQUS非线性分析、金属塑性成形理论,或从事相关课题研究的硕士/博士生。 结构设计工程:需要评估钣金件可制造性(DFM)或预测成型回弹的设计人员。 三、 使用场景及目标 学习目标: 掌握在ABAQUS中设置金属塑性成形仿真的全流程,包括材料定义、复杂接触设置、边界条件与载荷步。 学习如何调试和分析大变形、非线性接触问题的收敛性技巧。 理解如何通过仿真预测成型缺陷(如减薄、破裂、回弹),并与理论或实验进行对比验证。 应用价值:本案例的建模方法与分析思路可直接应用于汽车覆盖件、电器外壳、结构件等钣金产品的冲压工艺开发与模具设计优化,减少试模成本。 四、 其他说明 资源包内包含参数化的INP文件、CAE模型文件、材料数据参考及一份简要的操作要点说明文档。INP文件便于用户直接修改关键参数(如压边力、摩擦系数、行程)进行自主研究。 建议使用ABAQUS 2022或更高版本打开。显式动力学分析(如用Explicit)对计算资源有一定要求。 本案例为教学与工程参考目的提供,用户可基于此框架进行拓展,应用于V型弯曲
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值