《数据结构与算法分析:C语言描述》习题3.2~3.3

3.2 (题目中两个链表均以升序排列)

#include<stdio.h>
#include<malloc.h>
            /*假设输入都合法*/
typedef struct node
{
	int data;
	struct node* pNext;
}Node, * PtrNode;

PtrNode MakeList(void); //创建链表
void PrintLots(PtrNode L, PtrNode P);

int main(void)
{
	/*创建链表L和P*/
	PtrNode L = MakeList();
	PtrNode P = MakeList();
	PrintLots(L, P);

	return 0;
}

PtrNode MakeList(void)
{
	int Size;
	printf("请输入链表的长度:");
	scanf_s("%d", &Size);
	PtrNode pHead = (PtrNode)malloc(sizeof(Node));//创建链表的头节点
	PtrNode pTail = pHead;
	pTail->pNext = NULL;
	int temp;
	for (int i = 0; i < Size; i++)
	{
		PtrNode pNew = (PtrNode)malloc(sizeof(Node));
		printf("请输入链表的第%d个元素:",i+1);
		scanf_s("%d", &temp);
		pNew->data = temp;
		pNew->pNext = NULL;
		pTail->pNext = pNew;
		pTail = pNew;
	}
	return pHead;

}

void PrintLots(PtrNode L, PtrNode P)
{
	PtrNode pTemp = P->pNext;
	PtrNode LTemp = L->pNext;
	int count=0,pos=0;
	while (pTemp != NULL)
	{
		pos = pTemp->data - 1;
		while (count < pos)
		{
			LTemp = LTemp->pNext;
			count++;
		}

		printf("%d  ", LTemp->data);
		pTemp = pTemp->pNext;
	}

	return;
}

3.3 (a)

#include<stdio.h>
#include<malloc.h>
 /*假设输入都合法*/
typedef struct node
{
	int data;
	struct node* pNext;
}Node, * PtrNode;

PtrNode MakeList(void); //创建链表
void Swap(PtrNode pHead, int pos);//交换链表中位置为pos和pos+1的元素(pos从0开始)
void ShowList(PtrNode pHead);//输出链表中的元素

int main(void)
{
	PtrNode pHead = MakeList();
	ShowList(pHead);
	Swap(pHead, 2);
	ShowList(pHead);

	return 0;
}

PtrNode MakeList(void)
{
	int Size;
	printf("请输入链表的长度:");
	scanf_s("%d", &Size);
	PtrNode pHead = (PtrNode)malloc(sizeof(Node));//创建链表L的头节点
	PtrNode pTail = pHead;
	pTail->pNext = NULL;
	int temp;
	for (int i = 0; i < Size; i++)
	{
		PtrNode pNew = (PtrNode)malloc(sizeof(Node));
		printf("请输入链表的第%d个元素:",i+1);
		scanf_s("%d", &temp);
		pNew->data = temp;
		pNew->pNext = NULL;
		pTail->pNext = pNew;
		pTail = pNew;
	}
	return pHead;

}

void Swap(PtrNode pHead, int pos)
{
	PtrNode p = pHead->pNext;
	for (int i = 1; i < pos; i++) //循环结束,p指向位置为pos-1的元素
		p = p->pNext;

	PtrNode pTemp1 = p->pNext; //位置为pos的元素
	PtrNode pTemp2 = pTemp1->pNext->pNext;//位置为pos+2的元素

	p->pNext = pTemp1->pNext;
	p->pNext->pNext = pTemp1;
	pTemp1->pNext = pTemp2;

	return;


}

void ShowList(PtrNode pHead)
{
	PtrNode p = pHead->pNext;
	while (p != NULL)
	{
		printf("%d  ", p->data);
		p = p->pNext;
	}
	printf("\n");
	return;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值