zoukankan      html  css  js  c++  java
  • 单链表的实现

    链表

          链表是一种常见的重要的数据结构。 它是动态地进行存储分配的一种结构。 用数组存放数据时必须事先定义固定长度的数组, 如果不确定数组长度必须将数组定义的足够大, 于是很容易造成内存浪费。 而链表没有这种缺点, 它根据需要开辟内存单元。

          链表是随机存储的, 在插入, 删除操作上有很高的效率。 但是如果要访问链表中的某个元素的话,那就得从链表的头逐个遍历,直到找到所需要的元素为止,所以链表的随机访问的效率就比数组要低

     

    单链表的实现:

    #include<stdio.h>
    #include<iostream>
    
    using namespace std;
    
    struct NODE {
        int data;
        NODE *next;
    };
    
    NODE *head = NULL;
    
    void Add() {
        NODE *p1, *p2;
        printf("please input the data
     >> ");
        int _data;
        cin >> _data;
        p1 = new NODE;
        if(head == NULL) {
            head = p1;
            p1 -> data = _data;
            p1 -> next = NULL;
        } else {
            p2 = head;
            while(p2 -> next != NULL) {
                p2 = p2 -> next;
            }
            p2 -> next = p1;
            p1 -> data = _data;
            p1 -> next = NULL;
        }
        cout << "successfully added" << endl;
    }
    
    void Delete() {
        NODE *p1, *p2;
        cout << "please input the data" << endl << " >> ";
        int _data;
        cin >> _data;
        bool is = false;
        if(head == NULL) {
            cout << "no data" << endl;
            is = true;
        }
        p2 = head;
        p1 = p2 -> next;
        if(p2 -> data == _data) {
            head = p2 -> next;
            cout << "successfully deleted" << endl;
            is = true;
        } else {
            while(p1 -> data != _data) {
                p1 = p1 -> next;
                p2 = p2 -> next;
            }
            p2 -> next = p1 -> next;
            cout << "successfully deleted" << endl;
            is = true;
        }
        if(is == false) {
            cout << "no this data!" << endl;
        }
    }
    
    void Change() {
        cout << "please input the old data" << endl << " >> ";
        int orgin, _data;
        cin >> orgin;
        cout << "please input the new data" << endl << " >> ";
        cin >> _data;
        NODE *p1;
        p1 = head;
        while(p1 -> data != orgin) {
            p1 = p1 -> next;
        }
        p1 -> data = _data;
        cout << "successfully changed!" << endl;
    }
    
    void Show() {
        NODE *p1;
        p1 = head;
        while(p1 != NULL) {
            cout << p1 -> data << " >> ";
            p1 = p1 -> next;
        }
        cout << endl;
    }
    
    int main() {
        while(1) {
            printf("1--add, 2--delete, 3--change, 4--show, 5--insert, 6--exit
     >> ");
            int i1;
            int flag = 0;
            cin >> i1;
            switch(i1) {
            case 1 :
                Add();
                break;
            case 2 :
                Delete();
                break;
            case 3 :
                Change();
                break;
            case 4 :
                Show();
                break;
            case 5 :
                Insert();
                break;
            case 6 :
                flag = 1;
                break;
            }
            if(flag)break;
        }
        return 0;
    }
    

      

  • 相关阅读:
    用goto做异常处理
    零长度数组的妙用
    DTMF三种模式(SIPINFO,RFC2833,INBAND)
    Myeclipse下的struts2.3.8 配置 保证绝对好用
    Linux内核--内核数据类型
    Linux内核:kthread_create(线程)、SLEEP_MILLI_SEC
    3.4.4 数据预留和对齐(skb_reserve, skb_push, skb_put, skb_pull)
    Linux 2.6内核中新的锁机制--RCU
    Linux中SysRq的使用(魔术键)
    CentOS Linux服务器安全设置
  • 原文地址:https://www.cnblogs.com/xzrmdx/p/4973098.html
Copyright © 2011-2022 走看看