数据结构 线性表
线性表是最常用且简单的一种数据结构。
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);