C++单链表基本算法代码

#include
#include
using namespace std;

struct Data{//数据节点类型
	string key;
	string name;
	int age;
};

struct CLtype{//定义链表结构
	Data nodedata;
	CLtype *nextnode;
};

/*****************在链表的末尾添加节点*******************/
CLtype*CLAddend(CLtype*head,Data data)
{
	CLtype*node,*ntemp;
	if(!(node=new CLtype))//new函数找到一个CLtype类型的内存块,并返回该内存块的地址
	{
		cout<<"分配内存失败!"<nodedata=data;//保存节点数据
		node->nextnode=NULL;//设置结点指针为空,即作为表尾
	}
	if(head==NULL){
		head=node;
		return head;
	}
	else{
		ntemp=head;
		while(ntemp->nextnode!=NULL)//从头指针开始开始逐个检查,直到找到最后一个节点
		{
			ntemp=ntemp->nextnode;
		}
		ntemp->nextnode=node;
		return head;
	}
}

/******************插入头结点*************************/
CLtype*CLAddFirst(CLtype*head,Data data)
{
    CLtype*node;
	if(!(node=new CLtype)){
		cout<<"插入头结点失败!"<nodedata=data;
		node->nextnode=head;
		head=node;
	    return head;
	}
}
/**********************按照结点序号查找节点***************************/
CLtype*CLFindNodeNum(CLtype*head,int k){
	CLtype*tempn;
	int i;
	tempn=head;
	for(i=1;inextnode;
	return tempn;
}

/****************按照关键字查询**********************/
CLtype*CLFindNodeKey(CLtype*head,string name)
{
	
	CLtype*tempn;
	tempn=head;
	while(tempn){//遍历整个链表到链表结束
		
		if(tempn->nodedata.name==name)
		{
			return tempn;
		}
		tempn=tempn->nextnode;

	}
	return NULL;
}

/******************插入节点******************/
CLtype*CLInsertNode(CLtype*head,int k,Data nodedata)
{
	CLtype*tempn,*InserN;
	if(!(InserN=new CLtype)){
		cout<<"申请内存失败!"<nodedata=nodedata;
	InserN->nextnode=NULL;
	tempn=CLFindNodeNum(head,k-1);
	}
	if(tempn){
	InserN->nextnode=tempn->nextnode;
	tempn->nextnode=InserN;
	}
	else{
		cout<<"没有找到正确的插入位置"<nextnode)
	tempn->nextnode=tempn->nextnode->nextnode;
	else
		cout<<"没有找到正确的删除位置"<nextnode=NULL);i++)
		{
			count+=1;
			tempn=tempn->nextnode;
	}

	return count;
}
/*****************显示所有节点*********************/
void CLAllNode(CLtype*head)
{
	CLtype*tempn;
	tempn=head;
	Data data;
	while(tempn){
		data=tempn->nodedata;
		cout<<"key:"<nextnode;
	}
}



int main()
{
	CLtype*tempn,*head=NULL;
	Data data;
	int k;
	string name;
    cout<<"请先输入链表中的数据,格式为:学号,姓名,年龄(年龄为0时停止输入)"<>data.key>>data.name>>data.age;
	if(data.age==0)break;
	head=CLAddend(head,data);
	}
	CLAllNode(head);


	cout<<"请输入要插入的头结点:"<>data.key>>data.name>>data.age;
	head=CLAddFirst(head,data);
	CLAllNode(head);

	cout<<"请输入要插入的节点位置:"<>k;
	cout<<"请输入要插入的节点:"<>data.key>>data.name>>data.age;
	head=CLInsertNode(head,k,data);
	CLAllNode(head);

	cout<<"请输入要查找的节点数:"<>k;
	tempn=CLFindNodeNum(head,k);
	cout<nodedata.key<nodedata.name<nodedata.age<>name;
	tempn=CLFindNodeKey(head,name);
	cout<nodedata.key<nodedata.name<nodedata.age<>k;
	head=CLDeleteNode(head,k);
	CLAllNode(head);

	system("pause");
	return 0;
}

你可能感兴趣的:(c++)