c语言:顺序表的实现(三)将元素e插入到一个递减有序表中,不改变顺序表的递减有序性。

时间:2022-06-30 10:48:07
#include<iostream>
#include<stdio.h>
#define LIST_INIT_SIZE 100
using namespace std;
struct Node
{
int *elem;
int Length;
int Listsize;
};

void Error(char *s) //错误处理函数
{
cout << s << endl;
exit(1);
}
void InitNode(Node &L) //初始化函数
{
L.elem = new int[LIST_INIT_SIZE];
if (!L.elem)
Error("Overflow!");
L.Length = 0;
L.Listsize = LIST_INIT_SIZE;
}
void CreatNode(Node &l) //创建顺序表
{
int n;
cout << "请输入元素个数:";
cin >> n;
cout << "请输入数据元素:" << endl;
for (int i = 0; i < n; i++)
{
cin >> l.elem[i];
l.Length++;
}
cout << "顺序表创建成功!" << endl;
}


void printNode(Node &l) //输出函数
{
for (int i = 0; i < l.Length; i++)
{
cout << l.elem[i]<<" ";
}
cout << endl;
}

void IncreaseNode(Node &l, int e)//将元素e插入到
{
if (l.Length >= l.Listsize)
Error("Linear List overflow!");
for (int i = l.Length; (i > 0) && (l.elem[i - 1]<e); i--)
{
l.elem[i] = l.elem[i - 1];
l.elem[i - 1] = e;
}
l.Length++;
}
void Bublesort(Node &l) //冒泡排序法递减排序
{
int i, j, k;
for (j = 0; j<l.Length; j++) // 气泡法要排序n次
{
for (i = 0; i<l.Length - j; i++) // 值比较下的元素沉下去后,只把剩下的元素中的最大值再沉下去就可以啦
{
if (l.elem[i]<l.elem[i + 1]) //把值比较小的元素沉到底
{
k = l.elem[i];
l.elem[i] = l.elem[i + 1];
l.elem[i + 1] = k;
}
}
}
}
int main()
{
Node t;
int n;
InitNode(t);
CreatNode(t);
printNode(t);
Bublesort(t);
printNode(t);
cout << "请输入要插入的元素:";
cin >> n;
IncreaseNode(t, n);
printNode(t);
return 0;
}