• 链表的基本操作(创建链表,查询元素,删除元素,插入元素等)


    复习一下链表,参考书目为:算法笔记

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 struct node 
     4 {
     5     int data;
     6     node* next;
     7 };
     8 //创建链表 
     9 node* create(int Array[])
    10 {
    11     node *p,*pre,*head;//pre保存当前结点的前驱结点,head为头结点 
    12     head = new node;//头结点的创建 
    13     head->next=NULL;//头结点不需要数据域,指针域初始为NULL 
    14     pre=head;//记录pre为head 
    15     for(int i=0;i<10;i++){
    16         p=new node;//新建结点 
    17         p->data=Array[i];//赋值 
    18         p->next=NULL;//新结点指针域设置为NULL 
    19         pre->next=p;//前驱结点的指针域指向新结点 
    20         pre=p;//把pre设为p,作为下个结点的前驱结点 
    21     }
    22     return head;//返回头结点指针 
    23 }
    24 //查找元素 
    25 //带有head头结点的链表统计数据域为x的结点个数 
    26 int search(node* head,int x)
    27 {
    28     int count=0;//计数器 
    29     node* p=head->next;//从第一个结点开始 
    30     while(p!=NULL){//循环遍历链表 
    31         if(p->data==x) count++;//值相等count加一 
    32         p=p->next;
    33     }
    34     return count;
    35 }
    36 //插入元素
    37 //将x插入以head为头结点的链表的第pos和位置上 
    38 void insert(node* head,int pos,int x)
    39 {
    40     node* p=head;
    41     for(int i=0;i<pos-1;i++){
    42         p=p->next;
    43     }
    44     node* q=new node;//创建新结点 
    45     q->data=x;
    46     q->next=p->next;
    47     p->next=q;
    48 } 
    49 //删除元素
    50 //删除以head为头结点的链表中所有数据域为x的结点
    51 void del(node* head,int x)
    52 {
    53     node* p=head;//头结点 
    54     p=p->next;//头结点后的第一个结点
    55     node* pre =head;
    56     while(p!=NULL){
    57         if(p->data==x){
    58             pre->next=p->next;
    59             delete(p);
    60             p=pre->next;
    61         }else{//数据域不是x,把pre和p都后移一位 
    62             pre=p;
    63             p=p->next;
    64         }
    65     } 
    66 } 
    67 int main()
    68 {
    69     int Array[10]={5,3,6,1,2,3,3,6,3,8};
    70     node* L=create(Array);//新建链表,返回头指针head赋值给L 
    71     node* q=L;//头结点; 
    72     L=L->next;//头结点后面接的第一个带有数据域的结点 
    73     printf("输出所建链表的元素:");
    74     while(L!=NULL){
    75         printf("%d ",L->data);//输出每个结点的数据域 
    76         L=L->next;
    77     }
    78     //统计元素3的个数
    79     printf("
    查找元素为3的个数为:%d
    ",search(q,3)); 
    80     //删除元素为6的结点
    81     del(q,6); 
    82     printf("删除素为6的结点之后的链表;"); 
    83     L=q->next;//头结点后面接的第一个带有数据域的结点 
    84     while(L!=NULL){
    85         printf("%d ",L->data);//输出每个结点的数据域 
    86         L=L->next;
    87     }
    88     //在第5个位置插入元素1000
    89     insert(q,5,1000);
    90     printf("
    在第5个位置插入元素为100的结点之后的链表;");
    91     L=q->next;//头结点后面接的第一个带有数据域的结点 
    92     while(L!=NULL){
    93         printf("%d ",L->data);//输出每个结点的数据域 
    94         L=L->next;
    95     }
    96     return 0;
    97 }

    运行结果如下图:

  • 相关阅读:
    h5 拍照上传 代码
    java jdbc 链接本地mysql数据库 报错 Access denied for user 'root'@'localhost' (using password: YES)
    react.js 中对props 的理解
    react.js 如何 设置页面div 背景图片
    关于Vue.js 和 react.js 的异同
    如何用 npm ,搭建react 项目
    如何进行vue vux版本更新
    js 继承 函数
    absolute 和 z-index妙用
    关于 white-space: pre-wrap;的灵异现象
  • 原文地址:https://www.cnblogs.com/shixinzei/p/10759536.html
Copyright © 2020-2023  润新知