2007-01-04

数据结构课程源代码之单链表实现

关键字: 数据结构 源代码 单链表
/*
SingleLinkList.h 定义单链表结构及基本操作
*/

cpp 代码

  1. #define OK 1   
  2. #define ERROR 0   
  3. #define TRUE 1   
  4. #define FALSE 0   
  5. #define OVERFLOW -2   
  6. typedef int Status;   
  7. typedef int ElemType;    
  8.   
  9.   
  10. typedef struct LNode {   
  11.     ElemType data;   
  12.     struct LNode *next;   
  13. } LNode,*LinkList;   
  14.   
  15. /*  
  16. 单链表初始化操作,带头结点(头结点不存储数据,统一操作)  
  17. */  
  18. Status InitList_SL(LinkList& l) {   
  19.     l=(LNode*)malloc(sizeof(LNode));   
  20.     l->next=NULL;   
  21.     return OK;   
  22. }   
  23.   
  24. /*  
  25. 单链表销毁操作  
  26. */  
  27. Status DestoryList_SL(LinkList& l) {   
  28.     LNode *q,*p=l;   
  29.     while(p) {   
  30.         q=p->next;   
  31.         free(p);   
  32.         p=q;   
  33.     }   
  34.     l=NULL;   
  35.     return OK;   
  36. }   
  37. /*  
  38. 单链表头插法  
  39. */  
  40. Status CreateList_SL(LinkList& l,int n) {     
  41.     LNode* p;   
  42.     printf("请输入 %d 个数构造单链表:\n",n);   
  43.     for(int i=1;i<=n;i++) {   
  44.         p=(LNode*)malloc(sizeof(LNode));   
  45.         scanf("%d",&p->data);   
  46.         p->next=l->next;   
  47.         l->next=p;   
  48.     }          
  49.     return OK;   
  50. }   
  51.   
  52. /*  
  53. 取出第 i 号位元素,用 e 带回  
  54. */  
  55. Status GetElem(LinkList l,int i,ElemType& e) {   
  56.     LNode* p=l->next;    
  57.     int j=1;   
  58.     while(p&&j
  59.         p=p->next;   
  60.         ++j;   
  61.     }   
  62.     if(!p||ireturn ERROR;   
  63.     e=p->data;   
  64.     return OK;   
  65. }   
  66.   
  67. /*  
  68. 单链表的插入操作,插入元素 e 在第 i 号位  
  69. */  
  70. Status ListInsert_SL(LinkList& l,int i,ElemType e) {   
  71.     //带头结点的SingleList   
  72.     LNode* p=l;   
  73.     LNode* s;   
  74.     int j=0;   
  75.     while(p&&j
  76.         p=p->next;   
  77.         ++j;   
  78.     }   
  79.     if(!p||i-1
  80.         return ERROR;   
  81.     s=(LNode*) malloc (sizeof(LNode));   
  82.     s->data=e;   
  83.   
  84.     s->next=p->next;  //do insert    
  85.     p->next=s;   
  86.   
  87.     return OK;   
  88. }   
  89.   
  90. /*  
  91. 单链表的删除操作, 删除第 i 个元素,保存在 e 中并带回  
  92. */  
  93. Status ListDelete_SL(LinkList& l,int i,ElemType& e) {   
  94.     LNode* p=l;   
  95.     LNode* q;   
  96.     int j=0;   
  97.     while(p->next&&j
  98.         p=p->next;   
  99.         ++j;   
  100.     }   
  101.     if(!p->next||i-1
  102.         return ERROR;   
  103.     }   
  104.     q=p->next;   
  105.     p->next=q->next;   
  106.     free(q);       
  107.     return OK;   
  108. }   
  109.   
  110. /*  
  111. 打印单链表 L 中的元素值  
  112. */  
  113. Status DisplayList_SL(LinkList& l) {   
  114.     LNode* p=l->next;   
  115.     printf("the SingleList is : ");   
  116.     while(p) {   
  117.         printf("%d ",p->data);   
  118.         p=p->next;   
  119.     }   
  120.     printf("\n");   
  121.     return OK;   
  122. }   




/*
SingleLinkList.cpp 测试文件
*/
cpp 代码
  1. #include "stdio.h"   
  2. #include "stdlib.h"   
  3. #include "SingleLinkList.h"   
  4.   
  5. /*  
  6. 测试链表中各操作  
  7. */  
  8. int main() {   
  9.     LinkList a;   
  10.     ElemType e;   
  11.   
  12.     //初始化   
  13.     InitList_SL(a);   
  14.   
  15.     //测试头插法,建立链表       
  16.     CreateList_SL(a, 3);   
  17.        
  18.     DisplayList_SL(a);   
  19.        
  20.     GetElem(a,2,e);   
  21.     printf("从链表中取出的第2个元素为 %d\n", e);   
  22.        
  23.     ElemType elem = 332;   
  24.   
  25.     ListDelete_SL(a,3,e);   
  26.     printf("删除链表3号位元素后链表内容为:");   
  27.     DisplayList_SL(a);   
  28.   
  29.     ListInsert_SL(a,2,elem);   
  30.     printf("在链表2号位插入 %d 后,链表内容为:",elem);   
  31.     DisplayList_SL(a);   
  32.     printf("\n");   
  33.     return 0;   
  34. }   
  • SingleLinkList.rar (1.3 KB)
  • 描述: SingleLinkList.rar中含SingleLinkList.h和SingleLinkList.cpp两个文件,均已经通过VC++6.0编译运行
  • 下载次数: 29
评论
发表评论

您还没有登录,请登录后发表评论

shakesmin
搜索本博客
我的相册
2b7698ed-4c50-43f3-905d-80dc5ff793fa-thumb
STA42447
共 60 张
存档
最新评论