数据结构 线性表习题

本文介绍了数据结构中线性表的相关操作,包括有序表的插入保持有序性、线性表的逆置、顺序表元素的比较与删除、归并递增链表为递减链表以及双链表的Locate操作,通过实例展示了具体的过程和解决方案。
摘要由CSDN通过智能技术生成

数据结构 线性表

线性表是最常用且简单的一种数据结构。

	typedef struct tagnde{
   
		ElemType date;
		// 任意数目,组合,类型的数据成员;
		struct tagnode *Ptr;
		// 指针域 指向相邻结点
	}linknode,*linklist;

有序表的插入

时限 :1000ms 内存限制:10000K 总时限:3000ms

描述
先读入数据建立顺序表va,表中的数据元素递增有序,再读入一个整数x,将它插入到顺序表中的适当位置,并保持顺序表的有序性。

输入:

先输入一个小于100的正整数n,紧接着读入n个从小到大的正整数,建立顺序表,最后再读入一个正整数x,把它插入到顺序表中的适当位置,并保持顺序表的有序性。

输出:

按顺序输出整个顺序表,输出的每个元素占一行。

输入样例:

4
2 100 3000 3890
200

输出样例

2
100
200
3000
3890

#include<iostream>

using namespace std;

int n;
//定义全局变量 n 表示线性表的结点数

typedef struct tagnode
{
   
	int num;
	struct tagnode* next;
}node,*linklist;

void creatnode(linklist H);
int insnode(linklist H);
void destroynode(linklist H);
void output(linklist H);

int main()
{
   
	cin >> n;
	linklist H;
	H = new node;
	H->next = NULL;
	creatnode(H);
	insnode(H);
	output(H);
	destroynode(H);
	return 0;
}

void creatnode(linklist H)
//尾插法建立链表
{
   
	linklist p, q;
	int t;
	p = H;
	for (int i = 0; i < n; i++) {
   
		q = new node;
		cin >> t;
		q->num = t;
		q->next = NULL;
		p->next = q;
		p = q;
	}
	//生成新结点
}

int insnode(linklist H)
// 插入结点
{
   
	int t;
	cin >> t;
	linklist p, q;
	p = H;
	q = p->next;

	linklist tep = new node;
	// 生成要插入的结点
	tep->num = t;
	if (t < q->num) {
   
		//插入第一个位置
		tep->next = q;
		p->next = tep;
		return 1;
	}
	
	while (q != NULL) {
   
		p = q;
		q = p->next;

		if (q == NULL||q && t > p->num && t <= q->num)
		{
   
			tep->next = q;
			p->next = tep;
			return 1;
		}
	}
	return 0;
}

void output(linklist H)
//输出
{
   
	linklist p, q;
	p = H;
	q = p->next;
	while(q) {
   
		cout << q->num << endl;
		p = q;
		q = p->next;
	}
}
void destroynode(linklist H)
//摧毁链表
{
   
	linklist p,q;
	p = H;
	q = p ->next;
	while (q != NULL) {
   
		delete p;
		p = q;
		q = p ->next;
	}
}

线性表的逆置

时限: 1000ms 内存限制: 10000K 总时限: 3000ms

描述:

读入一个顺序表,实现顺序表的就地逆置。

输入

先输入一个小于100的正整数n,再从小到大的输入n个正整数,建立一个顺序表,然后实现顺序表的就地逆置。

输出:

按顺序输出逆置后的顺序表的所有元素,每个元素占一行。

输入样例:

3
300 3000 50000

输出样例:

50000
3000
300

#include<iostream>

using namespace std;

int n;

typedef struct tagnode
{
   
	int num;
	struct tagnode* next;
}node, * linklist;

void creatnode(linklist H);
void destroynode(linklist H);
void inversion(linklist H);
void output(linklist H);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值