#include<stdio.h>
#include<malloc.h>
#define elemType int
//定义数据元素
typedef struct LNode{
elemType data; //数据域
struct LNode *next; //指针域
}LNode,*List;
//头插法创建单链表
List ListHeadInsert(List p){
List s;
int x;
p = (List)malloc(sizeof(LNode)); //创建空结点
p->next = NULL;
printf("请输入数据(以9999结束):\n");
scanf("%d",&x);
while(x!=9999){
s = (List)malloc(sizeof(LNode));
s->data = x;
s->next = p->next;
p->next=s;
scanf("%d",&x);
}
return p;
}
//尾插法创建单链表
List TailInsert(List p ){
//创建头结点
p = (List)malloc(sizeof(LNode));
p->next = NULL;
int x;
printf("请输入数据(以9999结束):\n");
scanf("%d",&x);
List s,t;
t=p;//t 作为尾指针
while(x!=9999){
s = (List)malloc(sizeof(LNode));
s->data = x;
t->next = s;
s->next = NULL;
t=s;
scanf("%d",&x);
}
t->next=NULL;
return p;
}
//按序号查找结点
List Findth(List p,int i){
int cout = 0;
List t=p->next;
int data;
if(i==0)
return p;
while(cout!=i && t){
data = t->data;
t = t->next;
cout++;
}
if(t)
printf("第%d号位上的数据是%d\n",i,data);
else
printf("输入序号有误\n");
return p;
}
//按值查找结点
List FindK(List p,int data){
List t = p->next;
int x = t->data;
int cout = 1;
while(t){
t = t->next;
x = t->data;
cout++;
if(x==data){
break;
}
}
if(t)
printf("%d所对应的序号是%d\n",data,cout);
else
printf("链表中不存在该值\n");
return p;
}
//打印单链表
void PrintList(List p){
List t = p->next;//头结点无数据从第二个结点开始打印 不用p避免修改P的指向
if(!t){
printf("该单链表为空链表");
}
else{
while(t){
printf("%d ",t->data);
t=t->next;
}
}
printf("\n");
}
int main(){
List p ;
p = TailInsert( p );
//p = ListHeadInsert(p);
PrintList(p);
FindK(p,55);
}
按值查找节点函数修改如下,供参考:
//按值查找结点
List FindK(List p,int data){
List t = p->next;
int cout = 0;
while(t){
cout++;
if(t->data == data) break;
t = t->next;
}
if(t)
printf("%d所对应的序号是%d\n",data,cout);
else
printf("链表中不存在该值\n");
return p;
}