• 程序员面试宝典——数据结构之双链表


      1 #include<stdlib.h>
      2 #include<iostream>
      3 #include<stdio.h>
      4 #include<string>
      5 using namespace std;
      6 typedef struct Node{
      7 int data;
      8 struct Node* next;
      9 struct Node* pre;
     10 }dnode;
     11 
     12 dnode *create()
     13 {
     14     dnode*head,*p,*s;
     15     int x,cycle=1;
     16     head=(dnode*)malloc(sizeof(dnode));
     17     p=head;
     18      cout<<"
    Please input the data:"<<endl;
     19     while(cycle)
     20     {
     21         cin>>x;
     22         if(x!=0)
     23         {
     24             s=(dnode*)malloc(sizeof(dnode));
     25             s->data=x;
     26             p->next=s;
     27             s->pre=p;
     28             p=s;
     29         }
     30         else cycle=0;
     31     }
     32     head=head->next;
     33     head->pre=NULL;
     34     p->next=NULL;
     35     cout<<"
    The head data is"<<head->data<<endl;
     36     return head;
     37 }
     38 
     39 dnode* del(dnode* head,int num)
     40 {    
     41     dnode *p1,*p2;
     42     p1=head;
     43     while(num!=p1->data&&p1->next!=NULL)
     44     {
     45         p1=p1->next;
     46     }    
     47     if(num==p1->data)
     48     {
     49         if(p1==head)
     50         {
     51             head=head->next;
     52             head->pre=NULL;
     53             free(p1);
     54         }
     55         else if(p1->next==NULL)
     56         {
     57             p1->pre->next=NULL;
     58             free(p1);
     59         }
     60         else
     61         {
     62             p1->next->pre=p1->pre;
     63             p1->pre->next=p1->next;
     64             free(p1);
     65         }
     66     }
     67     else
     68         cout<<"could not been found "<<num<<endl;
     69     return head;
     70 }
     71 
     72 dnode* insert(dnode* head,int num)
     73 {
     74     dnode *p0,*p1;
     75     p1=head;
     76     p0=(dnode*)malloc(sizeof(dnode));
     77     p0->data=num;
     78     while(p0->data>p1->data&&p1->next!=NULL)
     79     {
     80         p1=p1->next;
     81     }
     82     if(p0->data<=p1->data)
     83     {
     84         if(head==p1)
     85         {
     86             p0->next=p1->next;
     87             p1->pre=p0;
     88             head=p0;
     89         }
     90         else
     91         {
     92             p0->next=p1;
     93             p1->pre->next=p0;
     94             p0->pre=p1->pre;
     95             p1->pre=p0;
     96         }
     97     }
     98     else
     99     {
    100         p1->next=p0;
    101         p0->pre=p1;
    102         p0->next=NULL;
    103     }
    104     return head;
    105 }
    106 
    107 void print(dnode* head)
    108 {    
    109     dnode* p=head;
    110     while(p->next!=NULL)
    111     {
    112         cout<<p->data<<"->";
    113         p=p->next;
    114     }
    115     cout<<endl;
    116 }
    117 int main()
    118 {
    119     dnode *head,stud;
    120     int n,del_num,insert_num;
    121     head=create();
    122     print(head);
    123     cout<<"input delete number:";
    124     cin>>del_num;
    125     head=del(head,del_num);
    126     print(head);
    127     cout<<"please input the insert data:";
    128     cin>>insert_num;
    129     head=insert(head,insert_num);
    130     print(head);
    131     return 0;
    132 }

  • 相关阅读:
    【onenet-edp传输】1、调试上报数据点和端对端透传
    【PYQT5快速开发】重定义边框、QSS美化皮肤主题
    MySQL
    Flask-Login一个账号单用户在线
    DataTable按钮,排序,单元格颜色
    python
    MegaCli64 raid对应关系
    openstack server status
    js中使用JSON.parse转换json
    linux使用pyodbc和freetds连接sqlserver
  • 原文地址:https://www.cnblogs.com/BasilLee/p/3871602.html
Copyright © 2020-2023  润新知