作业2

//2022.9.16作业,链式表取元素
#include <stdio.h>
#include <stdlib.h>


typedef struct link
{
int data;//代表数据域
struct link *next;//代表指针域,指向后继元素
}link;//link为节点名,每个节点都是一个link结构体

//定义头指针
link *L;
//初始化链表
void Initlink(){
L=(link*)malloc(sizeof(link));//创建首元节点
L->next=NULL;//创建头指针
}
//创建单链表
void creatlink(int n){
link *p;
Initlink();
int i;
for(i=1;i<=n;i++){
p=(link*)malloc(sizeof(link));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}
//遍历(输出访问)
void output(){
link *p;
p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
//按值查找
int getlink(int i){
link *p;
p=L;
while(p->data!=i&&p)
{
p=p->next;
}
return p->data;
}
//按序号查找
int Getlink(int i){
link *p;
p=L;
int j=0;
while(j<i&&p){
p=p->next;
j++;
}
if (j>i||!p||i==0)
{
printf("查找的值不存在");
exit(0);
}
return p->data;
}
void main(){
int n,i,j;
Initlink();
printf("请输入元素个数:");
scanf("%d",&n);
printf("请输入元素:");
creatlink(n);
printf("输出结果:");
output();
printf("\n输入要找的值:");
scanf("%d",&i);
printf("返回查找的值:");
printf("%d",getlink(i));
printf("\n输入要找的值的序号:");
scanf("%d",&j);
printf("返回查找的值:");
printf("%d",Getlink(j));
}