线性链表的创建、查找、插入、删除(c语言)
- 格式:doc
- 大小:45.00 KB
- 文档页数:6
线性链表的创建、查找、插入、删除(c语言)
#include<stdio.h>
#include<stdlib.h>
#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<i-1)
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<i-1)
{
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<=n;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(i<0||i>3)
{
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(j<1||j>2)
{
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语言初接触,数据结构初学,望大家指导!。