鱼C论坛

 找回密码
 立即注册
查看: 2341|回复: 0

[见证历程] 单链表

[复制链接]
发表于 2021-1-25 23:16:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一世轻尘 于 2021-3-30 19:19 编辑
  1. #include<iostream>
  2. #include<cstdlib>
  3. #define LEN sizeof(struct linklist)

  4. using namespace std;

  5. typedef int ElemType;
  6. typedef struct linklist{
  7.         ElemType data;
  8.         struct linklist *next;
  9. }Node,*LinkList;

  10. int length,num,i;
  11. void InitList(LinkList *L);//初始化链表
  12. void DestroyList(LinkList *L);//销毁链表
  13. void ClearList(LinkList *L);//清空链表
  14. void GetElem(LinkList L,int i,ElemType *e);//获取元素
  15. void ListInsert(LinkList *L,int i,ElemType e);//插入元素结点
  16. void ListDelete(LinkList *L,int i,ElemType *e);//删除元素结点
  17. void ShowList(LinkList L);//输出链表
  18. int ListLength(LinkList L);//求表长
  19. void Error(char *s);//报错信息
  20. Node *LocateElem(LinkList L,ElemType e);//定位元素位置


  21. int main()
  22. {

  23. }

  24. //初始化链表
  25. void InitList(LinkList *L)
  26. {
  27.         *L=(Node*)malloc(LEN);
  28.         (*L)->next=NULL;
  29. }

  30. //销毁链表
  31. void DestroyList(LinkList *L)
  32. {
  33.         Node *p;//定义一个结点指针,指向待销毁的结点
  34.         while(*L)
  35.         {
  36.                 p=*L;
  37.                 *L=(*L)->next;
  38.                 free(p);
  39.         }
  40. }

  41. //清空链表
  42. void ClearList(LinkList *L)
  43. {
  44.         Node *p=(*L)->next,*q;//从第一个结点开始释放,保留头结点
  45.         while(p)
  46.         {
  47.                 q=p;
  48.                 p=p->next;
  49.                 free(q);
  50.         }
  51.         (*L)->next=NULL;
  52. }

  53. //求表长
  54. int ListLength(LinkList L)
  55. {
  56.         int length=0;//计数器
  57.         Node *p = L;
  58.         while(p->next)
  59.         {
  60.                 length++;
  61.                 p=p->next;
  62.         }
  63.         return length;
  64. }

  65. //获取元素
  66. void GetElem(LinkList L,int i,ElemType *e)
  67. {
  68.         Node *p=L->next;
  69.         int j=1;
  70.         while(p&&(j<i))
  71.         {
  72.                 p=p->next;
  73.                 j++;
  74.         }
  75.         if(!p||(j>i))
  76.                 Error("Position Error!");
  77.         else
  78.                 *e = p->data;
  79. }

  80. //定位元素位置
  81. Node *LocateElem(LinkList L,ElemType e)
  82. {
  83.         Node *p=L->next;//设置指针,初始时指向链表第一个结点
  84.         while(p&&(p->data!=e))//顺链向后扫描
  85.                 p=p->next;
  86.         return p;//返回要查找的元素指针
  87. }

  88. //插入元素
  89. void ListInsert(LinkList *L,int i,ElemType e)
  90. {
  91.         Node *p = *L;
  92.         int j = 0;
  93.         while(p && (j < i-1) )
  94.         {
  95.                 p = p->next;
  96.                 j++;
  97.         }//运行完后p指向第i-1个结点
  98.         if(!p||(j>i-1))
  99.                 Error("Position Error!");
  100.         else//插入第i个结点
  101.         {
  102.                 Node *s=(Node*)malloc(LEN);
  103.                 s->data=e;//赋值
  104.                 s->next=p->next;
  105.                 p->next=s;
  106.         }
  107. }

  108. //删除元素并返回其数据域的值
  109. void ListDelete(LinkList *L,int i,ElemType *e)
  110. {
  111.         Node *p = *L,*q;
  112.         int j=0;
  113.         while((p->next)&&(j<i-1))
  114.         {
  115.                 p=p->next;
  116.                 j++;
  117.         }//运行完后指向第i-1个结点
  118.         if(!(p->next)||(j>i-1))
  119.                 Error("Position Error!");
  120.         q=p->next;
  121.         *e=q->data;
  122.         p->next=q->next;
  123.         free(q);
  124. }

  125. //输出链表
  126. void ShowList(LinkList L)
  127. {
  128.         Node *p=L->next;
  129.         while(p)
  130.         {
  131.                 cout << p->data;
  132.                 p = p->next;
  133.         }
  134. }

  135. //报错信息
  136. void Error(char *s)
  137. {
  138.     cout << s << endl;//输出错误信息提示
  139.     exit(1);//退出程序
  140. }
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 05:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表