如果我有两个结构定义如下,我如何在列表中插入一个新元素?我尝试了一些东西,但我不知道错误在哪里。插入新元素的函数称为insertFirst。主要是lst=insertFirst(lst,7); lst=insertFirst(lst,8);
谢谢!
typedef int DATA;
struct element {
DATA cheie;
struct element *urm;
};
typedef struct element Element, *ELEMENT;
struct lista {
int nr; //nr elemente
ELEMENT inceput;
ELEMENT sfarsit;
};
typedef struct lista Lista, *LISTA;
LISTA insertFirst(LISTA l, DATA x)
{
LISTA w;
w = (LISTA)malloc(sizeof(Lista));
if (w == NULL)return NULL;
w->inceput=(LISTA)malloc(sizeof(Lista));
w->inceput->cheie = x;
w->inceput->urm = l;
LISTA p = l;
for (; p->inceput->urm != NULL; p = p->inceput->urm);
w->sfarsit->cheie = p->inceput->cheie;
w->sfarsit->urm = NULL;
return w;
}
答案 0 :(得分:0)
看来你的意思是以下。那就是你有一个双面的单链表。
LISTA insertFirst(LISTA l, DATA x)
{
ELEMENT w;
w = (ELEMENT)malloc(sizeof(Element));
if ( w )
{
w->cheie = x;
w->urm = l->inceput;
l->inceput = w;
if ( !l->sfarsit ) l->sfarsit = w;
++l->nr;
}
return l;
}
定义该功能的另一种方法是以下
int insertFirst(LISTA l, DATA x)
{
ELEMENT w;
w = (ELEMENT)malloc(sizeof(Element));
int success = w != NULL;
if ( success )
{
w->cheie = x;
w->urm = l->inceput;
l->inceput = w;
if ( !l->sfarsit ) l->sfarsit = w;
++l->nr;
}
return success;
}
在main中你应该定义像
这样的列表Lista l = { 0, NULL, NULL };
这是一个示范程序
#include <stdio.h>
#include <stdlib.h>
typedef int DATA;
struct element
{
DATA cheie;
struct element *urm;
};
typedef struct element Element, *ELEMENT;
struct lista
{
int nr; //nr elemente
ELEMENT inceput;
ELEMENT sfarsit;
};
typedef struct lista Lista, *LISTA;
int insertFirst(LISTA l, DATA x)
{
ELEMENT w;
w = (ELEMENT)malloc(sizeof(Element));
int success = w != NULL;
if ( success )
{
w->cheie = x;
w->urm = l->inceput;
l->inceput = w;
if ( !l->sfarsit ) l->sfarsit = w;
++l->nr;
}
return success;
}
void outputLista( LISTA l )
{
printf( "%d: ", l->nr );
for ( ELEMENT current = l->inceput; current; current = current->urm )
{
printf( "%d ", current->cheie );
}
}
int main(void)
{
Lista l = { 0, NULL, NULL };
insertFirst( &l, 7 );
insertFirst( &l, 8 );
outputLista( &l );
putchar( '\n' );
return 0;
}
它的输出是
2: 8 7
至于你的功能实现,那就没有意义了。您无需在函数中创建新列表。您需要的是创建一个新元素并将其插入列表的当前第一个元素之前。
在列表末尾插入新元素的函数可能类似于
int insertLast(LISTA l, DATA x)
{
ELEMENT w;
w = (ELEMENT)malloc(sizeof(Element));
int success = w != NULL;
if ( success )
{
w->cheie = x;
w->urm = NULL;
if ( l->sfarsit )
{
l->sfarsit->urm = w;
}
else
{
l->inceput = w;
}
l->sfarsit = w;
++l->nr;
}
return success;
}