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]
相关文章推荐
- 头指针链表(复杂不常用,理解原理就行)
- 关于链表中头指针和头结点的理解
- 结构体中的链表指针以及->的含义,内存角度理解最易懂
- 指针与链表的理解
- 我对指针的深刻理解
- 小练习 - 单链表冒泡排序,交换指针域
- 练习指针构造链表,及链表的使用 ———寒星
- 深入理解 C++ 指针(十)---指针与链表问题
- 彻底理解链表中为何使用二级指针或者一级指针的引用
- 对用父类指针(或引用)指向父类对象和子类对象时,从而用父类指针或者引用访问成员时的深刻理解;
- 【练习1】输出一个螺旋数组,可以很好地理解数组和指针的使用
- 五行代码的疑惑(关于指针的深刻理解...)
- 【Weiss】【第03章】练习3.3:通过交换指针交换单/双链表元素
- 传说中的回调函数练习,也就是指针的深入理解
- 指针理解错误之构建链表操作
- 彻底理解链表中为何使用二级指针或者一级指针的引用
- 链表指针新理解以及插入里链表节点新方法
- 关于链表中头指针和头结点的理解【转】
- 从单链表创建中的内存变化来理解结构体指针与二级指针的用法
- C 13 理解指针---二级指针来删除链表的节点