您的位置:首页 > 其它

C链表练习时对指针的深刻理解

2013-04-05 19:25 204 查看
在做有关链表的练习时,遇到了链表内存错误的问题,最后解决了,在此分享给大家,错误及不足之处,还望大牛们指正。

所作的就是很简单地创建一个链表,并输出其元素,代码如下:

头文件  _List_H.h

#include<stdio.h>
#include<malloc.h>

#ifndef _List_H
typedef int ElementType  ;
struct Node;
typedef struct Node  * PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;

struct Node
{
ElementType Element;
Position Next;
};

List MakeEmpty ( List L);
int IsEmpty( List L);
int IsLast( Position P, List L );
Position Find( ElementType X, List L);
void Delete( ElementType X, List L );
Position FindPrevious( ElementType X, List L );
void Insert( ElementType X, List L, Position P );
void DeleteList( List L );
Position Header( List L );
Position First( List L );
Position Advance( Position P );
ElementType Retrieve( Position P );

#endif

void CreateList( int N , List *L)
{
//Create a list;

int i, Ele;
List LL_Temp, LL;

for( i = 0; i < N; i++)
{

LL =  ( Node * )malloc(sizeof( Node ));
scanf("%d",&Ele);
LL -> Element = Ele;
if( i > 0 && i < N - 1)
{
LL_Temp -> Next = LL;
LL_Temp = LL;
}
else
if( i == 0 )
{
LL_Temp = LL;
*L = LL;
}
else
if( i == N-1 )
{
LL_Temp -> Next = LL;
LL -> Next = NULL;
}
}

}

void PrintList(List L)
{

printf("This is function PrintList\n");
while( L )
{
printf(" %d  ", L ->  Element);
L = L -> Next;
}
printf("\n");
}
源文件 List.cpp

#include "_List_H.h"
int main()
{
List L ;
int n;

printf("Please input the number of the array:");
scanf("%d",&n);
printf("Please input the elements of the array:\n");

CreateList( n, &L);
PrintList( L );
return 0;
}
在初始写的时候,红色部分分别是这样的 List L, L = LL,这样写的话其实是将一个变量赋值给另一个变量,主函数中的变量从始至终都没有变化;上面的代码,使用了两级指针,传递的是地址,将会改变主函数中的变量。[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: