博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表的查找和取值-1
阅读量:5069 次
发布时间:2019-06-12

本文共 1695 字,大约阅读时间需要 5 分钟。

问题1:查找是否存在第i个元素,若存在用e返回第i个元素的值。不然返回0

查找部分算法:

(1)从第一个结点(L->next)顺链扫描,用指针指向当前扫描到的节点,p初值p=L->next

(2)定义j作为计数器,累计当前扫描到的结点数,初值为1

(3)当p指向扫描到下一个节点时,计数器加1;

(4)开始循环,循环条件是p不为空和j<i;当j=i和p不为空时说明找到第i个元素

(5)当p为空或者j>i时说明第i元素不存在。

代码:

#include<stdio.h>

#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef struct LNode{
        int data;
        struct LNode *next;
}LNode,*LinkList;
//建立一个只含头结点空链表
int InitList_L(LinkList &L){
        L=(LinkList)malloc(sizeof(LNode));
        if(!L){
                exit(OVERFLOW); // 存储分配失败
        }
        L->next=NULL;
        return OK;
}

//建立含n个元素的单链表,并且是尾插入,

int CreateList_L(LinkList &L,int n){
        LinkList p,q;
        int i;
        printf("Input the datas:");
        q=L;
        for(i=0;i<n;i++){
                p=(LinkList)malloc(sizeof(LNode));
                scanf("%d",&p->data);
                p->next=q->next;
                q->next=p;
                q=p;
        }
                return OK;
}

//若表中存在第i个元素,由变量e带回其值

int GetElem_L(LinkList L,int i,int &e){
        LinkList p;
        int j=0;
        p=L;
        while(p&&j<i){    //查找第i个元素
                p=p->next;
                ++j;
        }
        while(!p||j>i){
                return ERROR;
        }
        e=p->data;
        return OK;
}

//遍历单链表L

int TraverseList_L(LinkList L){
        LinkList p;
        p=L->next;
        while(p){
                printf("%d",p->data);
                p=p->next;
        }
        return OK;
}
main(){
        int i,n,e;
        LinkList L;
        InitList_L(L);
        printf("Input the length of the list L:");
        scanf("%d",&n);
        CreateList_L(L,n);
        printf("Input the search location:");
        scanf("%d",&i);
        if(GetElem_L(L,i,e)){
                printf("The data in the location %d is %d\n",i,e);
        }else{
                printf("Can't find the right location!\n");
        }
        printf("Output the datas:");
        TraverseList_L(L);
        printf("\n");
}

结果:

android@android-Latitude-E4300:~/work/c/danlianbiao$ ./getelemlist
Input the length of the list L:5
Input the datas:1 3 5 7 9
Input the search location:3
The data in the location 3 is 5
Output the datas:13579

 

转载于:https://www.cnblogs.com/shamoguzhou/p/6903116.html

你可能感兴趣的文章
安全测试的一些漏洞和测试方法
查看>>
spring框架学习笔记(八)
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
python numpy sum函数用法
查看>>
Linux中的SELinux详解--16
查看>>
php变量什么情况下加大括号{}
查看>>
less入门
查看>>
如何实现手游app瘦身?
查看>>
linux程序设计---序
查看>>
【字符串入门专题1】hdu3613 【一个悲伤的exkmp】
查看>>
C# Linq获取两个List或数组的差集交集
查看>>
21.Longest Palindromic Substring(最长回文子串)
查看>>
HDU 4635 Strongly connected
查看>>
ASP.NET/C#获取文章中图片的地址
查看>>
Spring MVC 入门(二)
查看>>
Java处理多人同时读写文件的文件锁处理
查看>>
格式化输出数字和时间
查看>>
页面中公用的全选按钮,单选按钮组件的编写
查看>>
判断文本框输入的文字长度
查看>>