#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef struct
{
int* elem;
int length;
}Sqlist;
void InitList(Sqlist& L)
{
L.elem = new int(100);
if (!L.elem)exit(-1);//注意书中此处为OVERFLOW,但这个头文件并没有学;就用-1;
L.length = 0;
}
void GetElem(Sqlist L,int i,int &e)
{
if (i<1 || i>L.length)
{
printf("取值错误");
exit(-1);
}
e = L.elem[i - 1];
}
int LocatElem(Sqlist L, int e)
{
for (int i = 0; i < L.length; i++)
if (L.elem[i] == e)return i + 1;
return 0;
}
void Listinsert(Sqlist &L,int i ,int e)
{
if ((i < 1) || (i > L.length + 1))
{
printf("插入错误");
exit(-1);
}
for (int j = L.length - 1; j >= i - 1; j--)//将第n个至第i个位置的元素依次向后移动一个位置,空出第i个位置。
L.elem[j + 1] = L.elem[j];
L.elem[i - 1] = e;
++L.length;
}
void MergeList(Sqlist& La, Sqlist Lb)
{
int m = La.length;
int n = Lb.length;
for (int i = 1; i <= n; i++)
{
int e;
GetElem(Lb, i, e);
if (!LocatElem(La, e))
Listinsert(La, ++m, e);
}
}
void besure(Sqlist L)
{
for (int i = 0; i < L.length; i++)
printf("%d", L.elem[i]);
}
int main()
{
Sqlist La, Lb;
InitList(La);
InitList(Lb);
int t1 = 4, t2 = 3;
La.length = 4;
Lb.length = 3;
for (int i = 0; i < 4; i++)
scanf_s("%d", &La.elem[i]);
for (int j = 0; j < 3; j++)
scanf_s("%d", &Lb.elem[j]);
MergeList(La, Lb);
besure(La);
return 0;
}
题目一(线性表):
最新推荐文章于 2024-11-01 15:19:21 发布
该程序使用C++编写,定义了一个结构体Sqlist表示链表,包括初始化链表、获取元素、定位元素、插入元素、合并链表和打印链表等操作。主要功能是合并两个已排序的链表,将未在第一个链表中出现的元素插入到第一个链表中,保持链表的有序性。
摘要由CSDN通过智能技术生成