作业帮 > 综合 > 作业

设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/05 21:59:10
设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点
dio.h>
#include <stdlib.h>
typedef struct node
{
char data;
struct node *nextPtr;
}*LinkList,Lnode;
static void CreateList(LinkList *headPtr,LinkList *tailPtr,char ch);
static void Decompose(LinkList *headPtrA,LinkList *headPtrB,LinkList *tailPtrB);
static void VisitList(LinkList headPtr);
static void DestroyList(LinkList *headPtr,LinkList *tailPtr);
int main(void)
{
LinkList headPtrA = NULL,tailPtrA = NULL,headPtrB = NULL,tailPtrB = NULL;
char ch;
while (1)
{
printf("Enter ch('@'-quit):");
scanf(" %c",&ch);
if (ch == '@')
{
break;
}
else
{
CreateList(&headPtrA,&tailPtrA,ch);
}
}
VisitList(headPtrA); /* 打印分解前的链表 */
if (headPtrA != NULL) /* 链表不空的情况对其进行分解 */
{
Decompose(&headPtrA,&headPtrB,&tailPtrB); /* 对链表进行分解*/
}
else
{
printf("headPtrA is empty.\n");
}
VisitList(headPtrA); /* 打印分解后的链表 */
VisitList(headPtrB);
DestroyList(&headPtrA,&tailPtrA); /* 销毁链表 */
DestroyList(&headPtrB,&tailPtrB);
return 0;
}
static void CreateList(LinkList *headPtr,LinkList *tailPtr,char ch)
{
LinkList newPtr;
if ((newPtr = (LinkList)malloc(sizeof(Lnode))) == NULL)
{
exit(1);
}
newPtr -> data = ch;
newPtr -> nextPtr = NULL;
if (*headPtr == NULL)
{
newPtr -> nextPtr = *headPtr;
*headPtr = newPtr;
}
else
{
(*tailPtr) -> nextPtr = newPtr;
}
*tailPtr = newPtr;
}
static void Decompose(LinkList *headPtrA,LinkList *headPtrB,LinkList *tailPtrB)
{
int count = 0;
LinkList cA,pA;
char ch;
cA = NULL;
for (pA = *headPtrA; pA != NULL; cA = pA,pA = pA -> nextPtr)
{
ch = pA -> data;
count++;
if (count % 2 == 0)
{
CreateList(headPtrB,tailPtrB,ch);
cA -> nextPtr = pA -> nextPtr;
}
}
}
static void VisitList(LinkList headPtr)
{
while (headPtr != NULL)
{
printf("%c -> ",headPtr -> data);
headPtr = headPtr -> nextPtr;
}
printf("NULL\n");
}
static void DestroyList(LinkList *headPtr,LinkList *tailPtr)
{
LinkList tempPtr;
while (*headPtr != NULL)
{
tempPtr = *headPtr;
*headPtr = (*headPtr) -> nextPtr;
free(tempPtr);
}
*headPtr = NULL;
*tailPtr = NULL;
}
已知带头结点的单链表L,指针P指向L链表中的一个结点为(非首结点、非尾结点), 具有12个结点的完全二叉树有 B .A.5个叶子结点 B.5个度为2的结点 C.7个分支结点 D.2个度为1的结点 1.具有12个结点的二叉树的二叉链表存储结构中,空链域NULL的个数为( ) A.11 B.13 C.23 D.25 两个以单链表作存储结构的一元多项式A和B,编写算法将多项式A和B相加,要求利用原表的结点空间和多项式. 两个带头结点的循环单链表ha和hb,设计算法将hb链在ha合成一个带头结点的单链表hc.要求不再开辟新的空间 已知指针ha和hb分别指向两个单链表的头结点,编写一个算法,将ha和hb连接在一起,即令其中一个表的首结点 试写出一个计算链表中结点个数的算法.其中指针p指向该链表的第一个结点 用什么方法可以判断B+树的结点是否为叶子结点(结点里没标记叶子结点) 关于数据结构的一道题试写一算法,将指针s指向的无头结点的单链表链接到带头结点单链表L的最后一个结点之后.函数原型使用St 已知带表头结点的单链表L,指针P指向L链表中的一个结点(非首、尾结点):删除P结点的语句序列是? 若循环链表的结点具有数据域data和指针域next,H指向其头结点,该表具有一个结点的条件是()为真值 4.设指针变量p指向单链表中结点A,指针变量s指向被插入的结点B,则在结点A的后面插入结点B的操作序列为________