Chinaunix首页 | 论坛 | 博客
  • 博客访问: 178343
  • 博文数量: 38
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 346
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-04 00:06
文章分类

全部博文(38)

文章存档

2016年(3)

2015年(15)

2014年(16)

2013年(4)

我的朋友

分类: LINUX

2013-12-17 00:27:35

        
     头插在主函数中被注释掉了,只执行尾插,从结果中可以看出输出顺序是1 2 3 ... 8 9 顺序输出的,这是和头插相反的输出次序,第二行结果是指定删除 7 元素后的输出显示。
    代码比较简单,复习一下链表,以免生疏遗忘了。


点击(此处)折叠或打开

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

  4. typedef int DataType;

  5. typedef struct node
  6. {
  7.     DataType data;
  8.     struct node *next;
  9. }LinkNode, *LinkList;

  10. LinkList create_empty_linklist();                       
  11. int insert_head_linklist(LinkList head,DataType data);  
  12. int insert_tail_linklist(LinkList head,DataType data);  
  13. int print_linklist(LinkList head);                      
  14. int delete_assign_node(LinkList head,DataType data);    //删除指定节点元素

  15. int main()
  16. {
  17.    LinkList head = NULL;
  18.    int i = 0;

  19.    head = create_empty_linklist();

  20.    for(i = 0; i < 10; i++)
  21.    {
  22.     // insert_head_linklist(head,i);
  23.         insert_tail_linklist(head,i);
  24.    }
  25.     print_linklist(head);

  26.     delete_assign_node(head,7);

  27.     print_linklist(head);

  28.    return 0;
  29. }
  30.     
  31. LinkList create_empty_linklist()
  32. {
  33.      LinkList head = NULL;

  34.      head = (LinkList)malloc(sizeof(LinkNode));
  35.      
  36.      head->next = NULL; //头结点指针域为空

  37.      return head ;
  38. }

  39. int insert_head_linklist(LinkList head,DataType data)
  40. {
  41.     struct node *temp = NULL;

  42.     temp = (struct node *)malloc(sizeof(struct node));
  43.     
  44.     
  45.     temp->data = data;
  46.     temp->next = head->next; //后继
  47.     head->next = temp; //前驱

  48.     return 0;
  49. }

  50. int insert_tail_linklist(LinkList head,DataType data)
  51. {
  52.     struct node *temp = NULL;
  53.     LinkList p = head;
  54.    
  55.     temp = (struct node*)malloc(sizeof(struct node));
  56.    
  57.     while(p->next) //遍历到链表尾部插入结点
  58.     {
  59.         p = p->next;
  60.     }

  61.     temp->data = data;
  62.     temp->next = NULL;
  63.     p->next = temp;
  64.          

  65.     return 0;
  66. }

  67. int delete_assign_node(LinkList head,DataType data) 
  68. {
  69.     LinkList temp = NULL;
  70.     LinkList p = head;

  71.     while(p->next)
  72.     {
  73.         if(p->next->data == data)
  74.         {
  75.             break ;
  76.         }
  77.         p = p->next;
  78.     }
  79.     
  80.     if(p->next == NULL) //要删除的节点不存在
  81.     {
  82.         return -1;
  83.     }

  84.     temp = p->next;
  85.     p->next = p->next->next;

  86.     free(temp);

  87.     return 0;
  88. }

  89. int print_linklist(LinkList head)
  90. {
  91.      LinkList p = head->next;

  92.     while(p)
  93.     {
  94.         printf("%d ",p->data);
  95.         p = p->next;
  96.     }

  97.     putchar('\n');
  98.     
  99.     return 0;
  100. }

    执行结果:









阅读(2011) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~