双向链表的查找

来源:互联网 发布:java web爬虫框架 编辑:程序博客网 时间:2024/05/21 21:49
#include <stdio.h>#include <malloc.h>typedef struct linknode//定义双向链表{    int data;    linknode *prior,*next;} Node,*Linklist;Linklist Createlist(int n);//建立双向链表int Find(Linklist L,int x);//在链表中查找值为x的下标void Showlist(Linklist L);//输出双向链表int main(void){    int n;    scanf("%d",&n);    Linklist L1=Createlist(n);    Showlist(L1);    printf("%d\n",Find(L1,5));    return 0;}Linklist Createlist(int n)//建立双向链表{    Linklist head=(Linklist)malloc(sizeof(Node));//申请头结点    Node *p,*e;    int x;    p=head;//让p指向头结点    for(int i=0; i<n; i++)    {        e=(Linklist)malloc(sizeof(Node));//申请新的节点        scanf("%d",&x);        e->data=x;        p->next=e;//前一个节点的后继指向新的节点        e->prior=p;//新节点的前驱指向上一个节点        p=e;//始终让p指向当前节点    }    p->next=NULL;//最后一个节点的后继为空    head=head->next;//头结点为空节点,所以向后移动一个    head->prior=NULL;//头结点的前驱为空    return head;//返回头结点}void Showlist(Linklist L)//输出双向链表{    while(L)    {        printf("%d ",L->data);        L=L->next;    }    printf("\n");}int Find(Linklist L,int x){    int i = 1;    while(L != NULL && L->data != x )//寻找值为x的元素**注意这里循环的条件不能写反。原因,当L == NULL 时候 L->data会出错    {        i++;                            L= L->next;    }    if(L == NULL)               //如果没找到返回-1        return -1;    else         return i;              //如果找到返回i}

原创粉丝点击