线性链表的创建.查找.插入.删除(c语言)
线性链表的创建、查找、插入、删除(c语言)
#include
#include
#define OK 1
#define ERROR 0
#define ElemType int
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
ElemType *elem;
int cur;
}LNode, *LinkList;
void printList(LinkList &L)
{
LNode *q;
q=L; q->next=L->next; printf("您的线性链表为 : ");
while(q->next!=NULL)
{ q=q->next;
printf("%d ",q->data);
}
printf("\n");
}
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
LNode *p,*s;
p=L;
int j=0;
while(p&&j
{
p=p->next;
++j;
}
if(!p||j>i-1)
return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
} //在链表对应位置插入数字
Status ListDelete_L(LinkList &L,int i,ElemType e)
{
LNode *p,*q;
p=L;
int j=0;
while(p->next&&j
{
p=p->next;
++j;
}
if(!(p->next)||j>i-1)
return ERROR;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
printf("删除的数字是 : %d\n",e);
return OK;
} //按位置删除
Status ListDelete(LinkList &L,int i,ElemType e)
{
LNode *p;
i=1; p=L; while(e!=p->next->data)
{ } p=p->next; i++;
if(e==p->next->data)
{
p->next=p->next->next;
printf("删除的数字所在位置是 : %d\n",i);
return OK;
}
else
return ERROR;
} //按数字删除
void CreateList_L(LinkList &L,int n)
{
struct LNode *p;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
printf("输入链表数据 : ");
for(int i=1;i
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next; L->next=p;
}
} //创建链表
int LocateElem_L(LinkList &L,ElemType e)
{
LNode *p;
int i=1; p=L->next; while(e!=p->data) { } p=p->next; i++;
printf("您查找数字 %d 在链表上的位置为 : %d\n",e,i); return 0;
}//查找
int main()
{
int i,n;
LinkList myLinkList;
printf("请输入链表中数字的数目 : ");
scanf("%d",&n);
CreateList_L(myLinkList,n);
printList(myLinkList);
for( ; ; )
{
printf("请选择操作:0、查找;1、插入;2、删除;3、退出\n请输入您的选择 : " );
scanf("%d",&i);
while(i3)
{
printf("输入错误,请重新输入!\n请输入您的选择 : "); scanf("%d",&i);
}
switch(i)
{
case 0:
{
int e;
printf("输入想要查找的数字 : ");
scanf("%d",&e);
LocateElem_L(myLinkList,e);
break;
}
case 1:
{
int i,e;
printf("输入想要插入数字的位置 : ");
scanf("%d",&i);
printf("输入想要插入的数字 : ");
scanf("%d",&e);
ListInsert_L(myLinkList,i,e);
printList(myLinkList);
break;
}
case 2:
{
int i,e,j;
printf("请选择删除方式:1、按位置删除; 2、按数字删除\n请输入您的选择 : ");
scanf("%d",&j);
while(j2)
{
printf("输入错误,请重新输入!\n请输入您的选择 : "); scanf("%d",&j);
}
if(j==1)
{
printf("输入想要删除数字的位置 : ");
scanf("%d",&i);
ListDelete_L(myLinkList,i,e);
}
else
{
printf("输入想要删除的数字 : ");
scanf("%d",&e);
ListDelete(myLinkList,i,e);
}
printList(myLinkList);
break;
}
case 3:
exit(0);
}
}
return 0;
}
c语言初接触,数据结构初学,望大家指导!