#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
}
双向链表的查找
最新推荐文章于 2022-09-25 10:39:43 发布