zoukankan      html  css  js  c++  java
  • 数据结构 线性链表

      1 #include<stdio.h> 
      2 #include<stdlib.h>
      3  
      4 #define OK 1
      5 #define ERROR 0
      6 #define OVERFLOW -1
      7 
      8 typedef int Elemtype;
      9 
     10 typedef struct LNode//线性链表 
     11 {
     12     Elemtype data;
     13     struct LNode *next;
     14     
     15 } LNode,*Linklist;
     16 
     17 int init_Linklist(Linklist &l)
     18 {
     19     l=(Linklist)malloc(sizeof(LNode));//建立头结点,并给头结点元素赋初值
     20     
     21     if(!l)
     22         exit(OVERFLOW);    
     23     
     24     l->next=NULL;
     25     l->data=0;
     26         
     27     return OK;
     28 }
     29 
     30 int input_Linklist(Linklist &l)
     31 {
     32     int n;
     33     printf("
    输入个数:
    ");
     34     scanf("%d",&n);
     35     printf("
    输入数据:
    ");
     36     
     37     Linklist tail = l;//新建一个临时的尾节点 
     38     
     39     for(int i=0;i<n;i++)
     40     {
     41         Linklist p=(Linklist)malloc(sizeof(LNode));//新建一个节点为当前节点 
     42         scanf("%d",&p->data);
     43         
     44         p->next=tail->next;
     45         tail->next=p;//尾接法     
     46         
     47         tail=tail->next;//保持为尾节点,使链表创建顺序正常 
     48     }
     49     return OK;
     50 }
     51 
     52 int get_Elem(Linklist l,int i,Elemtype &e)
     53 {
     54     //l为带头结点的单链表的头指针
     55     //当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
     56     Linklist p=l->next;
     57     int j=1;
     58     while(p&&j<i)
     59     {
     60         p=p->next;
     61         j++;
     62     }
     63     
     64     if(!p||j>i)
     65         return ERROR;
     66     
     67     e=p->data;
     68     return OK;
     69 }
     70 
     71 int insert_Linklist(Linklist &l,int i,Elemtype e)
     72 {
     73     //在带头结点的单链表l的第i个位置之前插入元素e
     74     Linklist p=l;
     75     int j=0;
     76     
     77     while(p&&j<i-1)//找到第i-1结点,(j=0头结点/j=1第1结点)
     78     {
     79         p=p->next;
     80         j++;
     81     }
     82     
     83     if(!p||j>i-1)//p为空/i输入错误
     84         return ERROR;
     85     
     86     Linklist s=(Linklist)malloc(sizeof(LNode));
     87     
     88     s->data=e;
     89     s->next=p->next;
     90     p->next=s;
     91     
     92     return OK;
     93 }
     94 
     95 int delete_Linklist(Linklist &l,int i,Elemtype &e)
     96 {
     97     //在带头结点的单链表l中,删除第i个元素,并使e返回其值
     98     Linklist p=l;
     99     int j=0;
    100     
    101     while(p->next&&j<i-1)//寻找第i个节点,并令p指向其前驱节点 
    102     {
    103         p=p->next;
    104         j++; 
    105     }
    106     
    107     if(!(p->next)||j>i-1)
    108         return ERROR;//删除位置不合理
    109     
    110     Linklist q=p->next;
    111     p->next=q->next;//链表中删去q节点 
    112     e=q->data;//记录数据 
    113     free(q);//释放q节点 
    114     
    115     return OK; 
    116 }
    117 
    118 int output_Linklist(Linklist &l)
    119 {
    120     printf("
    Linklist:
    ");
    121     
    122     Linklist p=l;
    123     
    124     while(p->next!=NULL)
    125     {
    126         printf("%5d",p->next->data);
    127         p=p->next;
    128     }
    129     printf("
    ");
    130     
    131     return OK;
    132 }
    133 
    134 int free_Linklist(Linklist &l)
    135 {
    136     while(l->next!=NULL)
    137     {
    138         Linklist Q=l->next;
    139         l->next=Q->next;//删去表头的后一个节点 
    140         
    141         free(Q);//释放该节点 
    142     }
    143     free(l);//头结点也释放 
    144     
    145     return OK;
    146 }
    147  
    148 int main()
    149 {
    150     Linklist la;
    151     
    152     init_Linklist(la);
    153     
    154     printf("
    请输入线性链表A:
    ");
    155     input_Linklist(la);
    156     
    157     
    158     printf("
    线性链表A为:
    ");
    159     
    160     output_Linklist(la);
    161     
    162     free_Linklist(la); 
    163     
    164     return 0;
    165 }

    PS:这个月一篇博客都没发,不知道干啥去了,想了想还是水一篇博客吧,这个是数据结构课里面的线性链表,

    主要有链表创建、输入输出、插入、删除、释放等操作,仅供参考......

    大佬见笑,,
  • 相关阅读:
    windows pm2 开机启动
    微信小程序自定义组件封装及父子间组件传值
    cloc 统计代码行数工具
    小程序获取当前页面路径url
    小程序navigator点击有时候会闪一下
    Centos7安装python3与Python2共存
    Docker配置国内官方镜像
    Centos7下Docker的安装与使用
    Centos7yum源修改为国内阿里源
    Vim下一键运行python代码
  • 原文地址:https://www.cnblogs.com/xwl3109377858/p/11766994.html
Copyright © 2011-2022 走看看