C中的结构:使用数组实现链表
在这个程序中,我尝试使用数组实现一个链表。我将数组TabLIST的元素初始化为-1,这样我就可以将数组中的每个元素的值都看作是一个空的框,我可以用来在列表中存储一个新的元素。 尝试运行此程序时出现分段错误。你能解释一下我的代码有什么错误吗 我试着调试我的代码,它说在 第75行:while(list.tabList[i].valeurElem!=-1) 这是我的密码:C中的结构:使用数组实现链表,c,struct,C,Struct,在这个程序中,我尝试使用数组实现一个链表。我将数组TabLIST的元素初始化为-1,这样我就可以将数组中的每个元素的值都看作是一个空的框,我可以用来在列表中存储一个新的元素。 尝试运行此程序时出现分段错误。你能解释一下我的代码有什么错误吗 我试着调试我的代码,它说在 第75行:while(list.tabList[i].valeurElem!=-1) 这是我的密码: typedef struct elementList { int valeurElem; int indexSui
typedef struct elementList
{
int valeurElem;
int indexSuivant;
int indexElem;
} elementList;
typedef struct list{
elementList tabList[tailleMax];
int debut;
int fin;
} listT;
// To initialize the list
void initListT(listT list)
{
for(int i = 0; i < tailleMax; i++)
{
list.tabList[i].valeurElem = -1;
list.tabList[i].indexSuivant = -1;
list.tabList[i].indexElem = -1;
}
}
// To create a new linked list
listT creerListeT()
{
listT alist;
initListT(alist);
alist.debut = 0;
alist.fin = 0;
return alist;
}
// To test if the list is empty
bool estVideListT(listT list)
{
return list.tabList[ 0 ].valeurElem == -1 ;
}
// Function To insert in the head of the linked list
listT insererTeteListT(listT list, int elemInserer)
{
if( estVideListT(list) )
{
int a = list.debut;
list.tabList[ a ].valeurElem = elemInserer;
list.tabList[ a ].indexSuivant = list.debut + 1;
list.tabList[ a ].indexElem = list.debut;
return list;
}
else
{
int i = 0;
while(list.tabList[i].valeurElem != -1)
{
i++;
}
list.tabList[ i ].valeurElem = elemInserer;
list.tabList[ i ].indexSuivant = list.debut;
list.debut = i;
return list;
}
}
void printList(listT list)
{
if( estVideListT(list) ) // testing if the array is empty
{
printf("The array is empty\n");
}
else
{
int i = list.debut;
while( list.tabList[i].indexSuivant != -1 )
{
printf("Element with index %d is : %d \n", i, list.tabList[i].valeurElem);
i++;
}
printf("Element with index %d (Last element) is : %d \n", i, list.tabList[i].valeurElem);
}
}
int main()
{
// Creating the list
listT myList = creerListeT();
// Insertion of the elements in the list (each element in the head of the list)
insererTeteListT(myList, 5);
insererTeteListT(myList, 3);
insererTeteListT(myList, 2);
insererTeteListT(myList, 4);
insererTeteListT(myList, 7);
// Printing the list
printList(myList);
return 0;
}
typedef结构元素列表
{
瓦勒勒勒姆国际酒店;
int指数;
int-indexElem;
}元素列表;
类型定义结构列表{
元素列表列表列表[tailleMax];
int首次亮相;
内鳍;
}利斯特;
//初始化列表的步骤
void initListT(列表列表)
{
对于(int i=0;i
在以下代码中:
// To initialize the list
void initListT(listT list)
{
for(int i = 0; i < tailleMax; i++)
{
list.tabList[i].valeurElem = -1;
list.tabList[i].indexSuivant = -1;
list.tabList[i].indexElem = -1;
}
}
//初始化列表的步骤
void initListT(列表列表)
{
对于(int i=0;i
由于您是按值传递
列表
,因此所有更改都是此函数中列表
变量的本地更改。这里是一个与基本代码相关的工作示例,请不要忘记释放与malloc对应的内存。我将把它作为一种锻炼留给你们去享受。此外,还需要检查与tailleMax关联的边界条件
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define tailleMax 100
typedef struct elementList
{
int valeurElem;
int indexSuivant;
int indexElem;
} elementList;
typedef struct list{
elementList tabList[tailleMax];
int debut;
int fin;
} listT;
// To initialize the list
void initListT(listT *list)
{
for(int i = 0; i < tailleMax; i++)
{
list->tabList[i].valeurElem = -1;
list->tabList[i].indexSuivant = -1;
list->tabList[i].indexElem = -1;
}
}
// To create a new linked list
listT *creerListeT()
{
listT *alist = (listT *)malloc(sizeof(listT));
initListT(alist);
alist->debut = 0;
alist->fin = 0;
return alist;
}
// To test if the list is empty
bool estVideListT(listT *list)
{
return list->tabList[ 0 ].valeurElem == -1 ;
}
// Function To inser in the head of the linked list
listT *insererTeteListT(listT *list, int elemInserer)
{
if( estVideListT(list) )
{
int a = list->debut;
list->tabList[ a ].valeurElem = elemInserer;
list->tabList[ a ].indexSuivant = list->debut + 1;
list->tabList[ a ].indexElem = list->debut;
return list;
}
else // Cas de liste non vide
{
int i = 0;
// On cherche l'indice de la première case vide
while(list->tabList[i].valeurElem != -1)
{
i++;
}
// Un élément est dans la tête de la liste s'il n'y aucun élément qui le pointe
list->tabList[ i ].valeurElem = elemInserer;
list->tabList[ i ].indexSuivant = list->debut;
list->debut = i;
return list;
}
}
// Function to print the elements of the list
void printList(listT *list)
{
if( estVideListT(list) ) // testing if the array is empty
{
printf("The array is empty\n");
}
else
{
// To revise
int i = 0;
while( list->tabList[i].indexSuivant != -1 )
{
printf("Element with index %d is : %d \n", i, list->tabList[i].valeurElem);
i++;
}
printf("Element with index %d (Last element) is : %d \n", i-1, list->tabList[i-1].valeurElem);
}
}
int main()
{
// Creating the list
listT *myList = creerListeT();
// Insertion of the elements in the list
insererTeteListT(myList, 5);
insererTeteListT(myList, 3);
insererTeteListT(myList, 2);
insererTeteListT(myList, 4);
insererTeteListT(myList, 7);
// Printing the list
printList(myList);
return 0;
}
#包括
#包括
#包括
#定义tailleMax 100
类型定义结构元素列表
{
瓦勒勒勒姆国际酒店;
int指数;
int-indexElem;
}元素列表;
类型定义结构列表{
元素列表列表列表[tailleMax];
int首次亮相;
内鳍;
}利斯特;
//初始化列表的步骤
无效初始列表(列表*列表)
{
对于(int i=0;i表格列表[i]。ValureLem=-1;
列表->表格列表[i]。索引向导=-1;
列表->表格列表[i].indexElem=-1;
}
}
//创建新的链接列表的步骤
listT*creerListeT()
{
listT*alist=(listT*)malloc(sizeof(listT));
初始列表(alist);
初始值=0;
alist->fin=0;
回归主义者;
}
//测试列表是否为空
bool estVideListT(列表*列表)
{
返回列表->表格列表[0]。ValureLem==-1;
}
//函数在链表的头部插入
listT*INSERETETELISTT(listT*list,int elemInserer)
{
if(estVideListT(列表))
{
INTA=列表->首次登场;
列表->表格列表[a]。ValureLem=elemInserer;
列表->小报列表[a]。索引向导=列表->首次登场+1;
列表->表格列表[a]。indexElem=list->首次登场;
退货清单;
}
else//Cas de liste未提供
{
int i=0;
//关于普莱米埃案件的调查
while(list->tabList[i].valeurElem!=-1)
{
i++;
}
//这是一个很好的例子
列表->表格列表[i]。ValureLem=elemInserer;
列表->小报[i].索引向导=列表->首次登场;
列表->首次登场=i;
退货清单;
}
}
//函数打印列表中的元素
作废打印列表(列表*列表)
{
if(estVideListT(list))//测试数组是否为空
{
printf(“数组为空\n”);
}
其他的
{
//修改
int i=0;
while(list->tabList[i].indexSuivant!=-1)
{
printf(“索引为%d的元素是:%d\n”,i,list->tabList[i].valurelem);
i++;
}
printf(“索引为%d(最后一个元素)的元素是:%d\n”,i-1,list->tabList[i-1].valurelem);
}
}
int main()
{
//创建列表
listT*myList=CreerListT();
//在列表中插入元素
insererTeteListT(myList,5);
insererTeteListT(myList,3);
insererTeteListT(myList,2);
insererTeteListT(myList,4);
insererTeteListT(myList,7);
//印刷李