数据结构与算法——单链表
雨中漫步
实现下列:
编写程序完成单链表的下列基本操作:
(1) 初始化单链表La。
(2) 在La中插入一个新结点。
(3) 删除La中的某一个结点。
(4) 在La中查找某结点并返回其位置。
(5) 打印输出La中的结点元素值。
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkNode;
void InitList(LinkNode * &L) //初始化
{
L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL;
}
bool InsertList(LinkNode * &L,int i,int e)//在单链表i处插入e
{
int j=0;
LinkNode *p=L,*s;
if(i<=0) return false;
while(j<i-1&&p!=NULL) //找到i-1个节点
{
j++;
p=p->next; //p储存i-1的节点
}
if(p==NULL)
return false;
else
{
s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=e;
s->next=p->next; //插入结点
p->next=s;
return true;
}
}
bool DeleteList(LinkNode * &L,int i,ElemType &e)
{
int j=0;
LinkNode *p=L,*q;
if(i<=0) return false;
while(j<i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL) return false;
else
{
q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
}
}
int Lookfor(LinkNode *L,ElemType e)
{int i=1;
LinkNode *p=L->next;
while(p!=NULL&&p->data!=e)
{p=p->next;
i++;
}
if(p==NULL) //如果找不到就是返回0,找到返回1
return 0;
else
return(i);
}
void Disp(LinkNode *L)
{
LinkNode *p=L->next;
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
printf("\n");
}
}
int main()
{LinkNode *L;int x=20;char a;
int i,e=0;
while(x--)
{
printf("请输入一个数据完成一下任务:\n输入1初始化\n输入2在i插人一个新节点\n输入3删除结点\n输入4查找并返回其位置\n输入5打印节点元素值\n输入6跳出\n");
a=getchar();
if(a=='1')
InitList(L),
printf("初始化成功\n");
if(a=='2')
{
printf("请输入插入位置i和插入数据e!\n");
scanf("%d%d",&i,&e);
InsertList(L,i,e),printf("插入成功\n");
}
if(a=='3')
{
printf("请输入删除位置i!\n");
scanf("%d",&i);
DeleteList(L,i,e),printf("删除成功\n");
}
if(a=='4')
{
printf("请输入查找数据!\n");
Lookfor(L,e),printf("查找完成\n");
}
if(a=='5') Disp(L),printf("输出成功\n");
if(a=='6') break;
}
return 0;
}