zoukankan      html  css  js  c++  java
  • 单链表的基本操作--c++

      1 #include <iostream>     //实现单链表的建立,测长和打印
      2 #include <string>
      3 using namespace std;
      4 struct node            // 定义节点类型,包含一个数据域和一个指针域
      5 {
      6     int data;
      7     node *next;
      8 };
      9 node * creat()
     10 {
     11     node *head,*p,*s;   // p指针为当前的指针,s为新建结点的指针
     12     int temp,cycle = 1;
     13     //head = (node*)malloc(sizeof(node));
     14     head = new node;
     15     p = head;
     16     while(cycle)
     17     {
     18         cout << "请输入int型数据" << endl;
     19         cin >> temp;
     20         if (temp != 0)             // 当temp不为零时,创建新的
     21         {
     22             //s = (node*)malloc(sizeof(node));
     23             s = new node;         //创建新的结点
     24             s -> data = temp;
     25             cout << "新节点为" << s -> data;
     26             p -> next = s;  // 使头结点的指针指向新生成的结点
     27             p = s;          //  使p指向当前新的结点
     28         }
     29         else
     30         {
     31             cout << "输入完成" <<endl;
     32             cycle = 0;
     33         }
     34     }
     35     head = head -> next;      //头指针
     36     p -> next = nullptr;     //置最后一个结点的指针为空
     37     return head;
     38 }
     39 // 单链表测长
     40 int length(node *head)
     41 {
     42     int  n = 0;
     43     node *p = head;
     44     while (p != nullptr )
     45     {
     46         p = p -> next;
     47         n++;
     48     }
     49     return n;
     50 }
     51 // 单链表打印
     52 void printlinklist(node * head)
     53 {
     54     node *p = head;
     55     while( p != nullptr)
     56     {
     57         cout << "data is" << p -> data << endl;
     58         p = p -> next;
     59     }
     60 }
     61 // 单链表插入
     62 node *insert(node * head, int num)
     63 {
     64     node *p0,*p1,*p2;
     65     p1 = head;
     66     p2 = new node;
     67     p0 = new node;// 插入结点
     68     p0 -> data = num;  // 插入数据
     69     // 若插入结点的数据大于原结点的数据,并且原结点的存在下一个元素
     70     while(p0 -> data > p1 -> data && p1 -> next != nullptr)
     71     {
     72         p2 = p1;
     73         p1 = p1 -> next;  // 这时  p2->p1->p0  ??
     74     }
     75     if (p0 -> data <= p1 -> data)
     76     {
     77         if ( p1 == head)
     78         {  //  头部前插入    p0和p1的位置是 P0->P1->
     79             head = p0;
     80             p0 -> next =p1;
     81         }
     82         else
     83         {  // 插入中间节点,   p2->p0->p1
     84             p2 -> next = p0;
     85             p0 -> next = p1;
     86         }
     87     }
     88     else
     89     {// 尾部插入结点,  p2->p1->p0->null
     90         p1 -> next = p0;
     91         p0 -> next = nullptr;
     92     }
     93     return head;
     94 }
     95 //删除单链表
     96 node *del(node *head, int num)
     97 {
     98     node *p1,*p2;
     99     p2 = new node;
    100     p1 = head;
    101     while(num != p1 -> data && p1 -> next != nullptr)
    102     {
    103         p2 = p1;
    104         p1 = p1 -> next;   //  p2->p1
    105     }
    106     if (num == p1->data)
    107     {
    108         if (p1 == head)  // 删除头结点
    109         {
    110             head =p1 -> next;
    111             delete p1;
    112         }
    113         else
    114         {
    115             p2 -> next = p1 -> next;
    116             delete p1;
    117         }
    118     }
    119     else
    120     {
    121         cout << "could not been found in current single linklist"<< endl;
    122     }
    123     return head;
    124 }
    125 int main()
    126 {
    127 
    128     cout << "创建单链表" << endl;
    129     node *head = creat();
    130     cout << endl;
    131 
    132     cout << "计算链表的长度" << endl;
    133     int n = length(head);
    134     cout << "the length of the linklist is " << n << endl;
    135     cout << endl;
    136 
    137     cout << "print the linklist" << endl;
    138     printlinklist(head);
    139     cout << endl;
    140 
    141     cout << "insert the node" << endl;
    142     cout << "please insert the data";
    143     int indata;
    144     cin >> indata;
    145     head = insert(head,indata);
    146     printlinklist(head);
    147     cout << endl;
    148 
    149     cout << "delete the node" << endl;
    150     cout << "input the data for deleting ";
    151     int deldata;
    152     cin >> deldata;
    153     head = del(head,deldata);
    154     printlinklist(head);
    155     cout <<endl;
    156     return 0;
    157 }
  • 相关阅读:
    设计模式中的多态——策略模式详解
    Spring IOC容器启动流程源码解析(一)——容器概念详解及源码初探
    并发包下常见的同步工具类详解(CountDownLatch,CyclicBarrier,Semaphore)
    HNOI2020游记
    旧年之末,新年伊始
    退役V次后做题记录
    PKUWC2020 游记
    CSP2019退役记
    CTS/APIO2019游记
    HNOI2019游记
  • 原文地址:https://www.cnblogs.com/simplepaul/p/6728260.html
Copyright © 2011-2022 走看看