C语言通用数据类型链表的构造数据域为指针_第1页
C语言通用数据类型链表的构造数据域为指针_第2页
C语言通用数据类型链表的构造数据域为指针_第3页
C语言通用数据类型链表的构造数据域为指针_第4页
C语言通用数据类型链表的构造数据域为指针_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、和一般的数据结构里面的链表的实现没什么大不同, 在 list.h 里面只修改一个地方 typedef void * ElemType; 也就是说数据域是一个无类型指针,链表本身不对这个指针有数据访问,在使用链表的时候 我们给一个有类型的指针,在操作的时候编译器有规律可循了,接下来只要链表数据访问的 函数了, 因为数据域是一个指针, 因为没有修改 TraverseList 函数, 那么给函数指针传递的 一个指向指针的指针,所以修改遍历数据域访问函数如下 int TraverseList(List*,int 理 */ (*)(ElemType *);/* 遍历访问,反问某个节点元素用函数处 lis

2、t.htypedef void * ElemType; typedef struct node ElemType data; struct node * next; ChainNode; typedef struct ChainNode *head; int size; ChainNode *tail; List; List * CreateList(void); /* 创建链表 */ void DestoryList(List*); /* 销毁链表 */ void ClearList(List*); /* 清空链表 */ int ListAppend(List*,ElemType); /*

3、追加元素 */ int ListInsert(List*,int,ElemType); /* 加入元素 */ int ListDelete(List *,int); /* 删除第几个元素 */ int GetElem(List*,int,ElemType *); /* 取得第几个元素的值用第三个参数返回 */ ChainNode * GetAddr(List *, int); /* 取得编号为 N 的元素所在地址 */ int TraverseList(List*,int (*)(ElemType *); 数处理 */ /* 遍历访问,反问某个节点元素用函 ChainNode * NewCha

4、inNode( ElemType); list.c #include list.h */ */ /* /* List *CreateList() List * pt = 0; ElemType data; pt=(List*)malloc( sizeof(List) ); if( !pt ) return 0; pt-head = NewChainNode(data ); if( ! pt-head ) free(pt); return 0; pt-tail = pt-head; return pt; /*=*/ void DestoryList(List * plist) ClearList

5、(plist); free(plist-head); plist-head = 0; free(plist); plist = 0; */ /* int ListAppend(List * plist,ElemType data) ChainNode * pt = 0; ChainNode * newpt = 0; if( !(plist plist-head) ) return 0; newpt = NewChainNode(data); if( !newpt ) return 0; plist-tail-next = newpt; plist-tail = newpt; return 1;

6、 */ /* int ListInsert(List * plist, int n ,ElemType data) ChainNode * pt = 0; ChainNode * newpt = 0; pt = GetAddr( plist, n-1 ); if( !(pt) ) return 0; newpt = NewChainNode(data); if( !newpt ) return 0; if ( pt-next = plist-tail ) plist-tail = newpt; newpt-next = pt-next; pt-next = newpt; return 1; /

7、*=*/ int GetElem(List * plist,int n,ElemType *data) ChainNode * pt = 0; pt = GetAddr(plist,n); if( ! pt ) return 0; *data = pt-data; return 1; /*=*/ int TraverseList(List* plist,int (*f)(ElemType *) ChainNode * pt = 0; int a=0; /*/ if( !(plist plist-head) ) return 0; for( a = 0 ,pt = plist-head-next

8、; pt ; pt = pt-next ) if( ! f(pt-data) ) return a+1; a+; return 0; */ /* void ClearList(List * plist) while ( ListDelete(plist,1) ); */ /*= (参考: http:/ ) int ListDelete( List * plist, int n ) ChainNode * pt =0; ChainNode * pf=0; if( !plist-head-next ) return 0; pt = GetAddr( plist,n-1 ); if ( pt-nex

9、t = plist-tail ) plist-tail = pt; if( !(pt pt-next ) return 0; pf = pt-next; pt-next = pt-next-next; free(pf); return 1; ChainNode * GetAddr(List * plist,int n) ChainNode * pt = 0; int a = 0; /*/ if( n 0) return 0; pt = plist-head; while( pt a n ) pt = pt-next; a+; return pt; ChainNode * NewChainNod

10、e(ElemType* data) ChainNode * pChain=0; pChain = ( ChainNode * )malloc( sizeof(ChainNode) ); if( ! pChain ) return 0; pChain-data=data; pChain-next=0; return pChain; uselist.c #include list.h typedef struct char ch ; int id; char name10; int r; myElemType; a20 myElemType =a,1,niei,2,b,2,aini,2,c,3,l

11、ove, 2,d,4,jack,2,e,5,alice,2,f,6,ben ,2,g,7,carlo,2,h,8,mason,2; void showList(List* plist); int putElem(ElemType *data); void main() List * mylist; int n=0; myElemType data; myElemType data2; /*/ myElemType* pdata; mylist = CreateList(); if( ! mylist) printf(error); return; for( n = 0 ;n 8 ;n+) Li

12、stAppend(mylist ,an); showList( mylist); data.ch = *; data.id = 8; strcpy( , 1223); data.r = 54; ListInsert(mylist,1,data); showList( mylist); data2.ch = A; data2.id = 54; strcpy( , bill); data2.r = 4; /*/ ListInsert(mylist,7,data2); showList( mylist); ListDelete(mylist,7); showList( mylist); ListDelete(mylist,1); showList( mylist); if (GetElem(mylist,5,pdata) ) printf(%c %d ,pdata-ch,pdata-id,pdata-name,pdata-r); %s %d /* ClearList(mylist); showList( mylist); DestoryList(mylist); mylist = 0; showList( mylist); */ void showList(List* plist) if( !plis

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论