• 单链表学习


    #include "stdafx.h"
    #include "stdio.h"
    #include <iostream>
    using namespace std;

    #define MAXSIZE 50
    #define swap(a,b) a=a+b;b=a-b;a=a-b;
    typedef struct Node{
     int data;
     struct Node *next;
    }LNode;
    void Output(Node *p);
    void TailOutput(LNode *p);
    // 头插入法建链表
    LNode* HeadList(LNode *head)
    {
     int i;
     LNode *p,*h;
     h = head;
        for(i=0;i<5;i++)
     {
           p = (struct Node*)malloc(sizeof(struct Node));
           p->data = i;
        p->next = h->next;
        h->next = p;//新创建的节点,总是作为第一个节点
     }
     return head;
    }
    /*
      为了操作方便,总是在链表的第一个结点之前附设一个头结点(头指针)
      head指向第一个结点。头结点的数据域可以不存储任何信息(或链表长度等信息)
    */
    //尾插入法建链表
    LNode* TailList(LNode *Tail)
    {
     LNode *p,*t;
     t = Tail;
     int i;
     for (i=0;i<10;i++)
     {
      p = (struct Node*)malloc(sizeof(struct Node));
      p->data = i;
      t->next = p;
      t = t->next;
     }
     t->next = NULL;
    // free(p);
     return Tail;
    }
    /*
      向链表中插入一个节点(插入在末尾)
    */
    LNode* insertNode(LNode *l,int value)
    {
     LNode *p,*t;
     t=l;
     while(t->next!=NULL)
     {
      t=t->next;
     }
       
        p=(struct Node*)malloc(sizeof(struct Node));
        p->data=value;
     p->next=NULL;
     t->next=p;
     
     return l;
    }
    /*
      删除某个节点的值
    */
    LNode* DeleteNode(LNode *l,int value)
    {
        LNode *p,*r;
     p=l;
        while(p!=NULL)
     {
      r=p->next;//p指向头节点,而头节点在定义时仅仅是一个节点,因此把头节点的下一个节点(第一个节点)
      if (r->data==value)
      {
       p->next=r->next;
       return l;
      }
      p=p->next; 
     }
     return l;
    }
    /*
      查找某个节点的值
    */
    int SearchNode(LNode *l,int pos)
    {
     LNode *p;
     int i=1;
     p=l;
     while (p->next!=NULL)
     {
      p=p->next;
      if (i==pos)
      {
       return p->data;
      }
            i++; 
     }
        return 0;
    }
    void Output(Node *p)
    {
     Node *l;
     l = p->next;
     while(l!=NULL)
     {
      printf("%d ",l->data);
      l = l->next;
     }
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
     LNode *tmp;
     Node *head,*p,*l;
     int t;
     head = (struct Node*)malloc(sizeof(struct Node));
     head->next = NULL;
       // tmp = HeadList(head);
     //Output(tmp);
     tmp = TailList(head);
     tmp = insertNode(tmp,5);
     tmp = DeleteNode(tmp,6);
     Output(tmp);
     t = SearchNode(tmp,3);
        printf("%d ",t);
        getchar();
        
        return 0;
    }

  • 相关阅读:
    统计创建对象个数
    动手动脑
    开学第一周心得
    放假第五周总结
    放假第四周总结
    第一周总结
    04-异常处理-动手动脑
    03-继承与多态-动手动脑
    02-类和对象-跟踪类对象创建个数
    02-类和对象-动手动脑
  • 原文地址:https://www.cnblogs.com/batman425/p/3319903.html
Copyright © 2020-2023  润新知