#ifndef STATUS_H
#define STATUS_H
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
#endif
#ifndef LIST_H
#define LIST_H
#include "status.h"
typedef struct node{
ElemType date;
int length;
struct node*next;
}node,*SqList;
SqList creat(SqList P,int len);
Status ListInsert(SqList P,int i,ElemType e);
Status InitList (SqList P);
int ListLength(SqList P);
int IsEmpty(SqList P);
int GetElem(SqList P,int i,ElemType *e);
int LocateELem(SqList P,ElemType e);
Status ListDelete(SqList P,int i,ElemType *e);
#endif
#include "status.h"
#include "list.h"
#include <stdio.h>
SqList creat(SqList L,int len){
SqList p,q;
int value,i;
L=(SqList)malloc(sizeof(node));
L->next=NULL;
q=L;
for(i=0;i<len;i++){
p=(SqList)malloc(sizeof(node));
printf("请输入第%d个数",i+1);
scanf("%d",&value);
p->next=NULL;
q->date=value;
q->next=p;
q=p;
}
return L;
}
int ListLength(SqList P){
int i=0;
SqList p=P;
while(p->next!=NULL){
p=p->next;
i++;
}
return i;
}
int IsEmpty(SqList P){
if(P->next==NULL){
return TRUE;
}
return FALSE;
}
int GetElem(SqList P,int i,ElemType *e){
SqList p=P;
int j=1;
for(;j<i;j++){
p=p->next;
}
*e=p->date;
return OK;
}
int LocateELem(SqList P,ElemType e){
int i=1;
SqList p;
p=P->next;
while(p!=NULL){
if(p->date==e){
return i+1;
}
i++;
p=p->next;
}
return ERROR;
}
Status ListInsert(SqList P,int i,ElemType e){
SqList p,q;
int j=0;
p=P;
while(j<i-1){
if(p!=NULL||i<1){
return ERROR;}
p=p->next;
j++;
}
if(p->next==NULL||j>i){
return ERROR;
}
q=(SqList)malloc(sizeof(node));
q->date=e;
q->next=p->next;
p->next=q;
return OK;
}
Status ListDelete(SqList P,int i,ElemType *e){
SqList p,s;
int j=1;
p=P;
while(p->next&&j<i){
++j;
p=p->next;
}
if(p->next==NULL||j>i){
return ERROR;
}
s=p->next;
p->next=s->next;
*e=s->date ;
free(s);
return OK;
}
#include <stdio.h>
#include "list.h"
int main(){
SqList sqlist,P,l;
SqList L;
int len,t,m,i,j;
ElemType *e;
printf("请输入链表的大小 len= ");
scanf("%d",&len);
P=creat(L,len);
t=ListLength(P);
printf("长度为%d\n",t);
m=IsEmpty(P);
if(m==TRUE){
printf("链表为空\n");
}
else{
printf("链表不为空\n");
}
printf("请输入你想找的元素的位置\n");
scanf("%d",&i);
GetElem(P,i,&e);
printf("第%d位的元素为%d\n",i,e);
printf("请输入你想找的元素\n");
scanf("%d",&e);
m=LocateELem(P,e);
printf("你查找的元素的位置为%d\n",m);
printf("\n请输入你想删除的位置\n");
scanf("%d",&i);
ListDelete(P,i,&e);
printf("%d\n",e);
printf("删除后的遍历\n");
l=P;
for(i=1;i<t;i++){
printf("%d ",l->date);
l=l->next;
}
printf("\n");
printf("请输入你想插入的位置和数据\n");
scanf("%d %d",&i,&e);
ListInsert(P,i,e);
printf("插入后的数据遍历为\n");
l=P;
for(j=0;j<t;j++){
printf("%d ",l->date);
l=l->next;
}
}