作业帮 > 综合 > 作业

数据结构问题 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/21 22:38:57
数据结构问题 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试
数据结构问题
已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试写一算法将这两个链表连接在一起,假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算.请分析你的算法的时间复杂度.
已有下图算法,求补写完整可执行代码(完整的能运行的程序)
实现如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
\x09int data;
\x09Node *next;
} *LinkList;

void InitList(LinkList & l)//初始化链表
{
    l = (Node*) malloc (sizeof(Node));
\x09l->next = NULL;
}

void AddList(LinkList & l,int x)//插入元素
{
   LinkList pa = l;
   while(pa->next)
   {
\x09  pa = pa->next;
   }

   LinkList temp = (LinkList)malloc(sizeof(Node));
   temp->data = x;
   temp->next = NULL;

   pa->next = temp;
}

void DelList(LinkList & l,int x)//删除链表元素
{
\x09LinkList pa = l;
\x09if(pa->next == NULL)
\x09\x09return;
\x09while(pa->next->next)
\x09{
\x09\x09pa = pa->next;
\x09}

\x09LinkList temp = pa->next;
\x09pa->next = NULL;
\x09free(temp);
}

void PrintList(LinkList &l)//打印链表元素
{
\x09LinkList pa = l->next;
\x09int count = 0;
\x09while(pa)
\x09{
\x09\x09printf("%d\t",pa->data);
\x09\x09count++;
\x09\x09if(count % 5 == 0)
\x09\x09\x09printf("\n");

\x09\x09pa=pa->next;

\x09}
\x09if(count % 5 != 0)
\x09\x09printf("\n");
}

void MergeList_L(LinkList &ha,LinkList &hb,LinkList &hc)//合并链表
{
\x09LinkList pa,pb;
\x09pa = ha;
\x09pb = hb;
\x09while(pa->next && pb->next)
\x09{
\x09\x09pa = pa->next;
\x09\x09pb = pb->next;
\x09}
\x09if(!pa->next)
\x09{
\x09\x09hc = hb;
\x09\x09while(pb->next) pb = pb->next;
\x09\x09pb->next = ha->next;
\x09}
\x09else
\x09{
\x09\x09hc = ha;
\x09\x09while(pa->next) pa = pa->next;
\x09\x09pa->next = hb->next;
\x09}
}
int main()
{
\x09LinkList ha,hb,hc;
\x09InitList(ha);
\x09InitList(hb);
\x09InitList(hc);
\x09for(int i = 0; i < 10; i++)
\x09\x09AddList(ha,i);
\x09printf("链表ha的元素有:\n");
\x09PrintList(ha);

\x09for(int i = 30; i < 35;i++)
\x09\x09AddList(hb,i);
\x09printf("链表hb的元素有:\n");
    PrintList(hb);

\x09//连接操作
\x09MergeList_L(ha,hb,hc);
\x09printf("合并后链表hc的元素有:\n");
\x09PrintList(hc);

}
测试如下:

再问: MergeList函数能解释下吗
再问: while循环和if的句子
已知指针ha和hb分别指向两个单链表的头结点,编写一个算法,将ha和hb连接在一起,即令其中一个表的首结点 已知两个单链表A与B分别表示两个集合,其元素类型为int且递增排列,其头结点指针分别为a,b.编写一个函数求出A和B的交 已知带头结点的单链表L,指针P指向L链表中的一个结点为(非首结点、非尾结点), 两个带头结点的循环单链表ha和hb,设计算法将hb链在ha合成一个带头结点的单链表hc.要求不再开辟新的空间 数据结构已知指针P指向双向链表中的一个结点(非首结点、非尾结点),则:(1)将结点S插入在P结点的直接 假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针.已知s为指向链表中第s个元素,试编写算法 已知带表头结点的单链表L,指针P指向L链表中的一个结点(非首、尾结点):删除P结点的语句序列是? 1.设顺序循环队列Q[0:m-1]的队头指针和队尾指针分别为F和R,其中队头指针F指向当前队头元素的前一个位置,队尾指针 若循环链表的结点具有数据域data和指针域next,H指向其头结点,该表具有一个结点的条件是()为真值 3.设顺序循环队列Q[0:M-1]的头指针和尾指针分别为F和R,头指针F总是指向队头元素的 关于数据结构的一道题试写一算法,将指针s指向的无头结点的单链表链接到带头结点单链表L的最后一个结点之后.函数原型使用St 在循环双向链表中表头结点的左指针域指向()结点,最后一个结点的右...