zoukankan      html  css  js  c++  java
  • 双向链表

      1 #include<bits/stdc++.h>
      2 using namespace std;
      3 #define sc scanf
      4 #define pr printf
      5 
      6 typedef struct LNode
      7 {
      8     int data;
      9     struct LNode *prior;
     10     struct LNode *next;
     11 }LNode,*LinkList;
     12 
     13 int tot = 0;
     14 //创建双向链表 
     15 void Create_LinkList(LinkList &L,int n)
     16 {
     17     L = (LNode *)malloc(sizeof(LNode));
     18     L->data = n + 1; 
     19     LNode *q = L;
     20     
     21     for(int i = 1;i < n;i++)
     22     {
     23         LNode *p = (LNode *)malloc(sizeof(LNode));
     24         sc("%d",&p->data);
     25         q->next = p;
     26         p->prior = q;
     27         q = p;
     28     }
     29 
     30     if(n)
     31     {
     32         LNode *p = (LinkList)malloc(sizeof(LNode));
     33         sc("%d",&p->data);
     34         q->next = p;
     35         p->prior = q;
     36         p->next = L;
     37         L->prior = p;
     38     }
     39     else
     40     {
     41         L->next = L;
     42         L->prior = L;
     43     }
     44 
     45 }
     46 
     47 //获取双向链表第i个元素的指针位置
     48 LinkList getelem_pos(LinkList &L,int i)
     49 {
     50     int cnt = 0;
     51     LNode *p = L;
     52     while(p->next != L && cnt < i)
     53     {
     54         cnt++;
     55         p = p->next;
     56     }
     57     if(cnt == i)
     58     return p;
     59     else {
     60         puts("position is invalid! Please re-enter.");
     61         return NULL;
     62     }
     63 } 
     64 
     65 //双向链表插入元素
     66 bool insert(LinkList &L,int i,int e)
     67 {
     68     LNode *p,*q;
     69     if(!(p = getelem_pos(L,i)))//该位置不合法 
     70     return 0;
     71     //cout << "hello" << endl;
     72     
     73     LNode *s = (LNode *)malloc(sizeof(LNode));
     74     
     75 //    if(s == NULL);//堆内存分配失败 
     76 //    return 0;
     77     
     78     q = p->prior; //第i-1个结点
     79      
     80     s->data = e;
     81     
     82     q->next = s;
     83     s->prior = q;
     84     
     85     s->next = p;
     86     p->prior = s;
     87     
     88     return 1; 
     89 } 
     90 
     91 //删除第i个元素
     92 bool delete_LinkList(LinkList &L,int i,int &e)
     93 {
     94     LNode *p,*q;
     95     p = getelem_pos(L,i);
     96     
     97     if(p == NULL) return 0; //该位置不合法 
     98     //cout << p->data << endl;
     99     e = p->data;
    100     q = p->prior;
    101     q->next = p->next;
    102     (p->next)->prior = q;
    103     free(p);
    104     return 1;
    105 } 
    106 
    107 //遍历双向链表 
    108 void deLinkList_Traver(LinkList &L)
    109 {
    110    LNode *p = L;
    111    while(p->next != L)
    112    {
    113        p = p->next;
    114        tot++;
    115        cout << p->data << " " << (p->prior)->data << " " << (p->next)->data << endl;
    116    }
    117    //puts("");
    118 }
    119 
    120 //销毁链表 
    121 void delete_Link(LinkList &L)
    122 {
    123     int k;
    124      for(int i = 1;i <= tot;i++)
    125      delete_LinkList(L,1,k);
    126      
    127      free(L);//销毁头结点 
    128 }
    129 int main()
    130 {
    131     int n;
    132     tot = 0;
    133     LinkList L;
    134     sc("%d",&n);
    135     Create_LinkList(L,n);
    136     deLinkList_Traver(L);
    137     bool ok = insert(L,2,7);
    138     //cout << ok << endl;
    139     cout << endl;
    140     if(ok)
    141     {
    142         deLinkList_Traver(L);
    143     }
    144     
    145     int e;
    146     ok = delete_LinkList(L,1,e);
    147     cout << endl;
    148     if(ok)
    149     {
    150         deLinkList_Traver(L);
    151     }
    152     
    153 //    delete_Link(L);
    154 //    deLinkList_Traver(L);
    155     return 0;
    156 }
    View Code
  • 相关阅读:
    C#虚方法
    C#构造方法--实例化类时初始化的方法
    C#抽象类与抽象方法--就是类里面定义了函数而函数里面什么都没有做的类
    C#函数重载
    C#继承
    C#中public与private与static
    FPGA按一下按键,对应端口输出单个脉冲
    MyBatis学习 之 五、MyBatis配置文件
    MyBatis学习 之 四、动态SQL语句
    MyBatis学习 之 三、SQL语句映射文件(2)增删改查、参数、缓存
  • 原文地址:https://www.cnblogs.com/mch5201314/p/11629569.html
Copyright © 2011-2022 走看看