Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1435187
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2013-12-26 13:04:35

摘要:链表初始化、加入节点、删除节点、遍历、反转等。

代码:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>

  5. #define OK 1
  6. #define Error 0

  7. typedef struct Node
  8. {
  9.     int data;
  10.     struct Node* next;
  11. }Node;

  12. typedef struct Node* LinkList;

  13. int InitList(LinkList *L)
  14. {
  15.     *L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
  16.     if(!(*L)) /* 存储分配失败 */
  17.             return Error;
  18.     (*L)->next=NULL; /* 指针域为空 */

  19.     return OK;
  20. }

  21. int insert_list(LinkList* link_list,int count,int *parament)
  22. {
  23.     int j=1;
  24.     LinkList p,insert_node;
  25.     p = *link_list;
  26.     while(j<count && p)
  27.     {
  28.         p = p->next;
  29.         ++j;
  30.     }
  31.     if (j>count || !p)
  32.         return Error;

  33.     insert_node = (LinkList)malloc(sizeof(Node));
  34.     insert_node->next = p->next;
  35.     insert_node->data = *parament;
  36.     p->next = insert_node;
  37.     return OK;
  38. }

  39. int delete_list(LinkList* link_list,int count)
  40. {
  41.     LinkList p ,q;
  42.     p = * link_list;

  43.     int j = 1;
  44.     while(j<count && p)
  45.     {
  46.         p = p->next;
  47.         ++j;
  48.     }
  49.     if (j>count || !p)
  50.         return Error;
  51.     q = p->next;
  52.     p->next = q->next;
  53.     printf("--delete = %d\n",q->data);
  54.     return OK;
  55. }

  56. int trave_list(LinkList link_list)
  57. {
  58.     int i=0;
  59.     LinkList p = link_list->next;
  60.     while (p)
  61.     {
  62.         ++i;
  63.         printf("element %d = %d\n",i,p->data);
  64.         p = p->next;
  65.     }
  66.     return OK;
  67. }
  68. int get_element(LinkList link_list,int count,int *parament)
  69. {
  70.     int i=1;
  71.     if (count < i)
  72.         return Error;
  73.     LinkList p = link_list->next;
  74.     while (p && i<count)
  75.     {
  76.         printf("element %d = %d\n",i,p->data);
  77.         p = p->next;
  78.         i++;
  79.     }
  80.     *parament = p->data;
  81.     return OK;
  82. }

  83. int reverse_list(LinkList* old_list,LinkList* new_list)
  84. {
  85.     if (old_list==NULL || new_list == NULL)
  86.         return Error;
  87.     LinkList list = (*old_list)->next;
  88.     while (list)
  89.     {
  90.         insert_list(new_list,1,&list->data);
  91.         list = list->next;
  92.     }
  93.     return OK;
  94. }

  95. void main()
  96. {
  97.     printf("hello world!\n");
  98.     LinkList my_linklist;
  99.     LinkList rev_list;

  100.     memset(&my_linklist,0,sizeof(my_linklist));
  101.     memset(&rev_list,0,sizeof(rev_list));

  102.     InitList(&my_linklist);
  103.     InitList(&rev_list);

  104.     int i;
  105.     for(i=0;i<10;i++)
  106.     {
  107.         insert_list(&my_linklist,1,&i);
  108.     }
  109.     trave_list(my_linklist);
  110.     
  111.     int get_num;
  112.     get_element(my_linklist,1,&get_num);
  113.     printf("get_num = %d\n",get_num);
  114.     delete_list(&my_linklist,1);
  115.     printf("after delete----\n");
  116.     trave_list(my_linklist);

  117.     printf("after reverse---\n");
  118.     reverse_list(&my_linklist,&rev_list);
  119.     trave_list(rev_list);
  120. }

阅读(643) | 评论(0) | 转发(0) |
0

上一篇:链表操作

下一篇:树相关操作汇总

给主人留下些什么吧!~~