C语言建立一个空线性表,输出结果本应该为“a=19 b=0 c=0”,可是实际运行结果为“a=19 b=17753914 c=-2
发布网友
发布时间:2022-07-08 17:54
我来回答
共4个回答
热心网友
时间:2023-10-10 15:41
你使用c语言写的,因而不存在引用的问题。因而在函数InitList_Sq函数中,你的形参有问题,应该改为指针。
函数声明应该int InitList_Sq(SqList *L)
在调用函数的时候,应该改为InitList_Sq(&firstL);
这么改了之后,InitList_Sq函数的实现部分,不再是L.element而是L->element,依次类推。
热心网友
时间:2023-10-10 15:41
int InitList_Sq(SqList L)这个函数的参数据是传值,不是传址,建议把函数参数的传递复习一下
热心网友
时间:2023-10-10 15:42
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
typedef struct tagStruNode
{
int val;
tagStruNode * pNext;
}STRU_NODE, *PSTRU_NODE;
//打印链表
void PrintLink(const PSTRU_NODE pLink)
{
PSTRU_NODE p = pLink;
while(NULL != p )
{
printf("%d,", p->val);
p = p->pNext;
}
printf("\n");
}
//将节点加入到一个增序排列的链表中
void AddNodeToLinkByInc(PSTRU_NODE * pLink, int val)
{
PSTRU_NODE p1 = *pLink;
PSTRU_NODE p2 = *pLink;
while(NULL != p1)
{
if(p1->val > val)
{
PSTRU_NODE pNew = (PSTRU_NODE)malloc(sizeof(STRU_NODE));
pNew->val = val;
if(p1 == p2) //加入到头节点
{
*pLink = pNew;
pNew->pNext = p1;
}
else
{
p2->pNext = pNew;
pNew->pNext = p1;
}
break;
}
p2 = p1;
p1 = p1->pNext;
}
if(NULL == p1)
{
PSTRU_NODE pNew = (PSTRU_NODE)malloc(sizeof(STRU_NODE));
pNew->val = val;
pNew->pNext = NULL;
if (NULL == * pLink) //头节点为NULL
{
*pLink = pNew;
}
else //加入到尾部
{
p2->pNext= pNew;
}
return;
}
}
//清除链表
void ClearLink(PSTRU_NODE pLink)
{
PSTRU_NODE p = pLink;
PSTRU_NODE p1 = NULL;
while(NULL != p)
{
p1 = p->pNext;
free(p);
p = p1;
}
}
//组合两个有序链表(增序)
PSTRU_NODE Combine(PSTRU_NODE pLink1, PSTRU_NODE pLink2)
{
PSTRU_NODE pL1 = pLink1;
PSTRU_NODE pL2 = pLink2;
PSTRU_NODE pOutLink = NULL;
while(NULL != pL1)
{
AddNodeToLinkByInc(&pOutLink, pL1->val);
pL1 = pL1->pNext;
}
while(NULL != pL2)
{
AddNodeToLinkByInc(&pOutLink, pL2->val);
pL2 = pL2->pNext;
}
return pOutLink;
}
int main()
{
PSTRU_NODE pLink1 = NULL;
PSTRU_NODE pLink2 = NULL;
PSTRU_NODE pCombineLink = NULL;
for(int i = 0; i < 5; i++)
{
AddNodeToLinkByInc(&pLink1, i);
AddNodeToLinkByInc(&pLink2, i + 5);
}
PrintLink(pLink1);
PrintLink(pLink2);
pCombineLink = Combine(pLink1, pLink2);
PrintLink(pCombineLink);
ClearLink(pLink1);
ClearLink(pLink2);
ClearLink(pCombineLink);
return 0;
}
热心网友
时间:2023-10-10 15:42
你初始化函数 的形参 有问题:应该SqList &L追问我试了 编译就出错了