• 线性表:双向链表


      1 //双向链表的结构
      2 typedef struct DualNode
      3 {
      4     Elemtype data;
      5     struct DualNode *prior; //前驱结点 
      6     struct DualNode *next;  //后继结点 
      7 } DualNode,*DuLinkList;
      8 //双向链表的插入 
      9 Status ListInsert_DuL(DuLinkList &L,int i,ElemType)
     10 {//在带头结点的双向链表L中第i个位置之前插入元素e 
     11     if(!(p = GetElem_DuL(L,i)))//在L中确定第i个元素的位置指针p 
     12     return ERROR; //p = NULL,则第i个元素不存在啊
     13     s = new DulNode;  //生成新结点s 
     14     s->data = e; //赋值 
     15     s->prior = p->prior;//让s的前指针指向p的前结点 
     16     p->prior->next = s; //让p的前结点的后指针指向s 
     17     s->next = p;        //s的后指针指向p 
     18     p->prior = s;       //p的前指针指向s 
     19     return OK; 
     20 }
     21 //双向链表的删除
     22 Status ListDelete_DuL(DuLinkList &L,int i) 
     23 {
     24     if(!(p = GetElem_DuL(L,i))) //在L中确定第i个元素的位置p 
     25     return ERROR;              //当p为NULL第i个元素不存在 
     26     p->prior->next = p->next;   //让p的前结点的后指针指向p的后结点 
     27     p->next->prior = p->prior; //让p的后结点的前指针指向p的前结点 
     28     
     29     delete p;                   //释放空间 
     30     return OK; 
     31 }
     32 
     33 指过来指过去线性表终于结束了
     34 
     35 
     36 //双向循环链表的实践
     37 26个字母A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
     38 输入3   D E F G H I J K L M N O P Q R S T U V W X Y Z A B C 
     39 输入-3  X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
     40 #include<stdio.h>
     41 #include<stdlib.h>
     42 
     43 #define OK 1
     44 #define ERROR 0
     45 
     46 typedef char ElemType; //数据类型 
     47 typedef int  Status;   //状态返回码 
     48 
     49 typedef struct DualNode
     50 {
     51     ElemType data;
     52     struct DualNode *prior;
     53     struct DualNode *next;
     54 }DualNode,*DuLinkList;
     55 
     56 Status InitList(DuLinkList *L) //初始化 
     57 {
     58     DualNode *p,*q;
     59     int i;
     60     
     61     *L = (DuLinkList)malloc(sizeof(DualNode));
     62     if(!(*L))
     63     {
     64         return ERROR;
     65     }
     66     
     67     (*L)->next = (*L)->prior = NULL;
     68     p = (*L); //p暂时是头结点 头指针 
     69     
     70     for(i=0; i < 26; i++)
     71     {
     72         q = (DualNode *)malloc(sizeof(DualNode));
     73         if(!q)
     74         {
     75             return ERROR;
     76         } 
     77         
     78         q->data = 'A'+i;
     79         q->prior = p;
     80         q->next = p->next;
     81         p->next = q;
     82         
     83         p = q;  //p成为下一个结点 
     84     }
     85     
     86     p->next = (*L)->next; //让其变成循环 
     87     (*L)->next->prior = p;
     88     
     89     return OK;
     90 }
     91 
     92 void Caesar(DuLinkList *L,int i)
     93 {
     94     if(i > 0)
     95     {
     96         do
     97         {
     98             (*L) = (*L)->next;
     99         }while(--i);
    100     }
    101     
    102     if(i < 0)
    103     {
    104         i=i-1;  //先进入链表 不然最初头结点L的prior指向NULL
    105         (*L)=(*L)->next;
    106         do
    107         {
    108             (*L)=(*L)->prior;
    109         }while(++i);
    110     }
    111 }
    112 
    113 int main(void)
    114 {
    115     DuLinkList L;
    116     int i,n;
    117     
    118     InitList(&L);
    119     printf("请输入一个整数:");
    120     scanf("%d",&n);
    121     printf("\n"); 
    122     Caesar(&L,n);
    123     
    124     for(i = 0; i < 26; i++)
    125     {
    126         L = L->next;
    127         printf("%c",L->data);
    128     }
    129     return 0;
    130 }
  • 相关阅读:
    网络编程
    mysql
    python 基础
    vim 操作
    linux 基本命令
    基本库使用(urllib,requests)
    震撼功能:逐浪CMS全面支持PWA移动生成意指未来
    硬件能力与智能AI-Zoomla!逐浪CMS2 x3.9.2正式发布
    从送外卖到建站售主机还有共享自行车说起-2017年8月江西IDC排行榜与发展报告
    HTTP协议知多少-关于http1.x、http2、SPDY的相关知识
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12491204.html
Copyright © 2020-2023  润新知