2023mid

2

立冬了,天帝召集十二生肖作为小动物的代表参加宴席,为过冬做准备。这不,小动物们陆陆续续地按照以下顺序到来了:

1.鼠 Rat              11.猫 Cat

2.牛 Ox               12.羊 Goat

3.猫 Cat              13.猴 Money

4.猫 Cat              14.猫 Cat

5.虎 Tiger           15.猫 Cat

6.兔 Rabbit         16.鸡 Rooster

7.龙 Dragon        17.狗 Dog

8.猫 Cat               18.猫 Cat

9.蛇 Snake           19.猪 Pig

10.马 Horse         20.猫 Cat

1.       请按到达的顺序用尾插法建立小动物们的单链表,结点数据域至少必须包含各个小动物的英文名,并打印链表。要求数据写在代码或者以文件读入,无需键盘输入。(20分)

2.       什么?那么多只猫混入了12生肖中?老鼠瑟瑟发抖,天帝勃然大怒。快请设计一个递归算法,把单链表中的猫删除掉!输出没有猫的链表。(20分)

3.       整理十二生肖链表,使得整理后的链表按照动物英文名字符串从小到大排列。输出整理后的链表。(20分)

#include "1.h"
bool r_ini(pnode& L) {
	//No Head
	L = new node;//分配一个头节点
	if (L == NULL) {
		return false;//内存不足,分配失败
	}
	L->next = NULL;//头节点之后还没有节点
	return true;
}

//尾插法
void r_creat(pnode& L, ELemType e) {
	if (L == NULL) {
		r_ini(L);
	}
	pnode t = L;
	while (t->next != NULL) {
		t = t->next;
	}

	pnode p2 = new node;
	p2->data = e;
	p2->next = NULL;
	t->next = p2;//连上去
	t = p2;
}

void r_traverse(const pnode& L) {//
	
	cout << "打印该链表如下:" << endl;
	pnode p3 = L;//工作指针p3
	while (p3 != NULL) {
		cout << p3->data << ' ';
		p3 = p3->next;
	}
	cout << endl;
}


void r_sort(pnode& head) {
	pnode dummy = new node;
	dummy->next = head;
	pnode tail = nullptr; // 维护遍历终点
	// 不断把大的值往右转移,遍历终点总是能变成最大值,再更新遍历终点
	while (tail != head) {
		pnode pre = dummy;
		pnode cur = pre->next;
		pnode nxt = cur->next;
		while (nxt != tail) {
			if (nxt->data<cur->data) { // 穿针引线交换节点
				pre->next = nxt;
				cur->next = nxt->next;
				nxt->next = cur;

			}
			else {
				cur = cur->next;
			}
			pre = pre->next;
			nxt = cur->next;
		}
		tail = cur;
	}
	head = dummy->next;
	dummy = nullptr;
}
void r_remove(pnode& p,ELemType& e) {
	//pnode p = L->next;
	if (p == nullptr) {
		return;
	}
	else {
		if (p->data == "Cat") {
			//pnode temp = p->next;
			//e = p->data;
			//p = temp->next;
			//delete temp;
			p = p->next;//aaaaaaaaaaaaa我哭死
			r_remove(p, e);
		}
		else {
			r_remove(p->next, e);
		}
	}
}

1--debug 逆序输出

#include "LinkList.h"

void Print(LinkList  first)
{
	cout << "Print" << endl;
	LinkList  p = first->next;
	while (p)
	{
		cout << p->data;///1dui
		p = p->next;

	}
	cout << endl;
}

void Input(LinkList& first)
{
	LinkList r;
	r = first = new LNode;
	char ch;
	while ((ch = getchar()) != '\n')
	{
		LinkList p = new LNode;
		p->data = ch;
		p->next = NULL;aaaaaaaaaaa2
		r->next = p;
		r = p;
	}
}

void Free(LinkList& first)
{
	while (first);
	{
		LinkList  p = first->next;
		delete first;
		first = p;
	}
}

void Inverse(LinkList& first)
{
	LinkList p = first->next, q;
	first->next = NULL;//3
	while (p)
	{
		q = p->next;//2->1
		p->next = first->next;
		first->next = p;
		p = q;
	}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值