1、求两线性表LA与LB分别表示两个集合,求A = A U B
void union(Linear_lsit LA, Linear_lsit LB){
n = ListLength(LA); //LA的表长
for(i =1; i <= ListLength(LB); i++){
x = GetNode(LB, i);//取LB中第i个值赋给x
if(LocateNode(LA, x) == 0){
InsertList(LA, ++n, x);
}
}
}
2、删除线性表L中重复的原素
void purge(linear_List L)
{
i = 1;
while (i < ListLenght(L))
{
x = GetNode(L, i);
j = i + 1;
while (j <= ListLength(L))
{
y = GetNode(L, j);
if (x == = y)
{
DeleteList(L, j);
}
else
{
j++;
}
}
i++;
}
3、在一个顺序表中找到最大值与最小值,及其所在的位置
void MaxMin(SeqList L, DataType * max, DataType * min, int *k, int *j)
{
int i;
*max = L.data[0];
*min = L.data[0];
*k = *j = 1; // 假设第一个即使最大值也是最小值
for (i = 1; L.length; i++)
{
if (L.data[i] > *max)
{
*max = L.data[i];
*k = i;
}
else if (L.data[i] < *min)
{
*min = L.data[i];
*j = i;
}
}
}
4、将一个头节点指针为a的带头结点的单链表A分解成两个单链表A和B,其中头节点指针分别为a和b,使得A链表中含有远链表A中序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,并保持原来的相对顺序
void split(LinkList a, LinkList b)
{
ListNode *p, *r, *s;
p = a->next;
r = a;
s = break;
while (p != NULL)
{
r->next = p;
r = p;
p = p->next;
if (p)
{
s->next = p;
s = p;
p = p->next;
}
}
r->next = s->next = NULL;
}
5、已有一个节点数据域为整型的,且按大到小顺序排列的头节点指针为L的非空单循环链表,试写一个算法插入一个结点(其数据域为x)至循环表的适当位置使之保持链表的有序性
void InsertList(LinkList L, int x)
{
ListNode *s, *p, *q;
s = (ListNode *)malloc(sizeof(ListNode));
s->data = x;
p = L;
q = p->next;
while (q->data > x && q != L)
{
p = p->next;
q = p->next;
}
p->next = s;
s->next = q;
}