一、第二章课后作业
1、将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间。表中不允许有重复的数据。
3、已知两个链表A和B分别表示两个集合,其元素递增排列。请设计一个算法,用于求出A和B的交集,并存放在A链表中。
6、设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的结点。
7、设计一个算法,将链表中所有结点的链接方向“原地”逆转,即要求仅利用原表中的存储空间,换句话说,要求算法的空间复杂度为O(1)。
8、设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同)。
10、已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为O(1)的算法,该算法可删除线性表中所有值为item的数据元素。
二、课上作业
1、单链表的逆置
void inverse(LinkList &L)
{
p=L->next;
L->next=NULL;
while(p)
{
q=p->next;
p->next=L->nextt
L->next=p;
p=q;
}
}
2、链表实现两个一元多项式的相加
#include<iostream>
using namespace std;
typedef struct Term
{
float coef;
int exp;
} Term;
typedef struct Lnode
{
Term data;
struct Lnode *next;
} Lnode, *LinkList;
void CreateList(LinkList &L, int n)
{
L = new Lnode;
L->next = NULL;
while(n--)
{
Lnode *r = L;
Lnode *p = new Lnode;
cin >> p->data.coef >> p->data.exp;
if(!p->data.coef)
continue;
while(r->next != NULL && r->data.exp < p->data.exp)
{
r = r->next;
}
p->next = r->next;
r->next = p;
}
}
void PrintList(LinkList &L)
{
if(!L->next)
{
cout << "0" << endl;
return;
}
Lnode *p = L->next;
while (p != NULL)
{
cout << p->data.coef << "X^" << p->data.exp;
p = p->next;
if(p != NULL)
{
cout << " + ";
}
}
cout << endl;
}
LinkList AddList(LinkList &L1, LinkList &L2)
{
LinkList s = new Lnode;
s->next = NULL;
L1 = L1->next;
L2 = L2->next;
Lnode * r = s;
while(L1 != NULL && L2 != NULL)
{
if(L1->data.exp < L2->data.exp)
{
r->data.coef = L1->data.coef;
r->data.exp = L1->data.exp;
r->next = L1;
r = r-> next;
L1 = L1->next;
}
else if(L1->data.exp > L2->data.exp)
{
r->data.coef = L2->data.coef;
r->data.exp = L2->data.exp;
r->next = L2;
r = r-> next;
L2 = L2->next;
}
else
{
L1->data.coef += L2->data.coef;
if(L1->data.coef)
{
r->next = L1;
r = r-> next;
}
L1 = L1->next;
L2 = L2->next;
}
}
if(L1 != NULL)
r->next = L1;
else
r->next = L2;
return s;
}
int main()
{
LinkList L1, L2, s;
int m, n;
cout << "请依次输入第一个和第二个多项式的项数:" << endl;
cin >> m >> n;
cout << "请输入第一个多项式各项的系数和指数:" << endl;
CreateList(L1, m);
PrintList(L1);
cout << "请输入第二个多项式各项的系数和指数:" << endl;
CreateList(L2, n);
PrintList(L2);
s = AddList(L1, L2);
PrintList(s);
return 0;
}