#include
#include
#define ERROR 1
#define TRUE 0
typedef int ElemType;
typedef struct node{
ElemType data; //数据域
struct node *next; //指针域
}LNode,*LinkList;
int Length_LinkList(LinkList H);
LNode* Get_LinkList(LinkList H,int k);
LinkList Creat_LinkList1(){//采用头插法
LNode *s;
int x;
LinkList H;
H=(LinkList)malloc(sizeof(LNode)); //生成头结点
H->next=NULL; //空表
printf("请输入一个数(-1结束):");
scanf("%d",&x);
while(x!=-1){ //输入-1结束
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=H->next;
H->next=s;
printf("请输入一个数(-1结束):");
scanf("%d",&x);
}
return H;
}
LinkList Creat_LinkList2(){//采用尾插法
int x;
LNode *s,*r;
LinkList H=(LinkList)malloc(sizeof(LNode));//生成头结点
H->next=NULL; //空表
r=H;
printf("请输入一个数(-1结束):");
scanf("%d",&x);
while(x!=-1){
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=r->next;
r->next=s;
r=s; //r始终指向链表的尾节点
printf("请输入一个数(-1结束):");
scanf("%d",&x);
}
return H;
}
//求链表的长度
int Length_LinkList(LinkList H){
LNode *p=H;
int i=0;
while(p->next!=NULL){
i++;
p=p->next;
}
return i;
}
LNode* Get_LinkList(LinkList H,int k){//安序号查找
int j=0 ;
LNode *p=H->next;
while(p!=NULL &&jnext;
j++;
}
if(j==k)
return p;
else
return NULL;
}
LNode* Locate_LinkList(LinkList H ,ElemType x){ //按值查找
LNode *p=H->next;
while(p!=NULL && p->data!=x)
p=p->next;
return p; //出去要判断返回值是否为NULL
}
//插入操作
int Insert_LinkList(LinkList *H,int i,ElemType x){//在单链表H的第i个位置上插入为x的元素
LNode *p,*s;
p=Get_LinkList(H,i-1);
if(p==NULL){
printf("插入位置i错误");
return ERROR;
}
else{
s=(LNode*)malloc(sizeof(LNode)); //申请新结点
s->data=x;
s->next=p->next; //新结点插入在第i-1个节点之后
p->next=s;
return TRUE;
}
}
//删除操作
int Del_LinkList(LinkList H,int i){//删除单链表H上的第i个数据结点
LinkList p,q;
p=Get_LinkList(H,i-1); //查找第i-1个结点
if(p==NULL){
printf("第i-1个结点不存在\n");
return ERROR;
}
else{
if(p->next==NULL){
printf("第i个结点不存在\n");
return ERROR;
}
else{
q=p->next; //指向第i个结点
p->next=q->next; //从链表中删除
free(q); //释放*q
return TRUE;
}
}
}
//查看链表中的值
void Print_LinkList(LinkList H){
LNode *p;
int i=0;
p=H->next;
while(p!=NULL){
i++;
printf("第%d个结点的值为:%d\n",i,p->data);
p=p->next;
}
}
//测试
int main(void){
LinkList lst,h;
int a,i,b;
lst=Creat_Linklist1();
printf("打印链表结点信息:\n");
Print_LinkList(lst);
printf("请输入要插入值和位置");
scanf("%d %d",&a ,&i);
b=Insert_LinkList(lst,i,a);
printf("请输入要查找的值:");
scanf("%d",&a);
h=Locate_LinkList(lst,a);
printf("请输入要查找元素的位置:");
scanf("%d",&i);
h=Get_LinkList(lst,i);
printf("链表的长度为%d\n",Length_LinkList(lst));
return 0;
}
/*
链接时出现的错误:
error LNK2001: unresolved external symbol _Creat_Linklist1
查看:声明,定义,调用 函数是否一致
*/