zoukankan      html  css  js  c++  java
  • 单向链表【数据结构-朱战立】

      1 /*本程序是单链表的创建,其中包括:单链表初始化,链表长度的判断,链表的插入、链表删除、链表取出、链表销毁等*/
      2 #include <stdio.h>
      3 #include <malloc.h>//涉及到动态分配内存,所以要定义头文件
      4 #include <stdlib.h>
      5 
      6 //定义抽象类型
      7 typedef int DataType;
      8 //定义节点
      9 typedef struct node{
     10 
     11     DataType data;
     12     struct node *next;
     13 }SLNode;
     14 
     15 //初始化链表
     16 void LinkInit(SLNode **head)
     17 {
     18     if ((*head = (SLNode *)malloc(sizeof(SLNode))) == NULL)//特别容易犯错误的地方,应该将(*head = (SLNode *)malloc(sizeof(SLNode)))加外括号
     19     {
     20         exit(1);
     21     }
     22     (*head)->next = head;
     23 }
     24 
     25 //判断链表的长度
     26 int LinkLength(SLNode *head)
     27 {
     28     SLNode *p=head;
     29     int num=0;
     30 
     31     while (p->next!=head)
     32     {
     33         
     34         p = p->next; 
     35         num++;
     36         
     37     }
     38     return num;
     39 }
     40 
     41 //插入链表
     42 int LinkInsert(SLNode *head, int i, DataType x)
     43 {
     44     SLNode *p, *q;
     45     int j = -1;
     46     
     47     if((q = (SLNode*)malloc(sizeof(SLNode)))==NULL) exit(1);
     48 
     49     p = head;
     50     while (p->next!=head&&j<i-1)//i-1
     51     {
     52         p = p->next;
     53         j++;
     54     }
     55     if (j!=i-1)
     56     {
     57         printf("error!");
     58         return 0;
     59     }
     60 
     61     q->data = x;
     62         
     63     q->next = p->next;
     64     p->next = q;
     65     return 1;
     66 
     67 }
     68 
     69 //删除链表
     70 int LinkDelete(SLNode *head, int i, DataType *x)
     71 {
     72     SLNode *p,*q;
     73     int j = -1;
     74 
     75     p = head;
     76     while (p->next!=head&&p->next->next!=NULL&&j<i-1)
     77     {
     78         p = p->next;
     79         j++;
     80     }
     81     if (j != i-1)
     82     {
     83         printf("error!");
     84         return 0;
     85     }
     86     q = p->next;
     87     *x = q->data;
     88 
     89     p->next = p->next->next;
     90     free(q);
     91     return 1;
     92 }
     93 
     94 //取出链表
     95 int LinkGet(SLNode *head, int i,DataType *x)
     96 {
     97     SLNode *p;
     98     int j = -1;
     99 
    100     p = head;
    101     while (p->next!=head&&j<i)
    102     {
    103         j++;
    104         p = p->next;
    105     }
    106     if (j != i)
    107     {
    108         printf("error!");
    109         return 0;
    110     }
    111     else
    112     {
    113         *x = p->data;
    114         return 1;
    115     }
    116 }
    117 
    118 //清空链表
    119 void LinkDestroy(SLNode **head)
    120 {
    121     SLNode *p, *newp;
    122     
    123     p = *head;
    124     while (p!=head)
    125     {
    126         newp = p;
    127         p = p->next;
    128         free(newp);
    129     }
    130     *head = NULL;
    131 }
    132 
    133 
    134 //主函数 应用
    135 
    136 int main()
    137 {
    138     SLNode *mylist;
    139     int i,x;
    140 
    141     LinkInit(&mylist);
    142     for ( i = 0; i < 10; i++)
    143     {
    144         if (LinkInsert(mylist,i,i+1)==0)
    145         {
    146             printf("插入error!
    ");
    147             getchar();
    148             return;
    149         }
    150     }
    151     if (LinkDelete(mylist, 4, &x) == 0)
    152     {
    153         printf("error!
    ");
    154         return;
    155     }
    156     else
    157     {
    158         printf("删除数字:%d
    ", x);
    159     }
    160     for ( i = 0; i < 9; i++)
    161     {
    162         if (LinkGet(mylist, i, &x) == 0)
    163         {
    164             printf("error!
    ");
    165             return;
    166         }
    167         else
    168         {
    169             printf("%d    ", x);
    170         }
    171     }
    172     LinkDestroy(&mylist);
    173     getchar();
    174     getchar();
    175     return 0;
    176 }
  • 相关阅读:
    物料清单概述
    java开发webservice的1种方式
    java web service简单示例
    IOS证书过期
    Windows 2012 R2 安装net4.6.1
    sqlserver 性能调优脚本
    solidty--owner.sol
    ERC20-USDT
    EOS 公开节点及自有节点部署
    微信第三方平台授权流程
  • 原文地址:https://www.cnblogs.com/leime/p/9477788.html
Copyright © 2011-2022 走看看