#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode //结点
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList NewLNode(LNode *P,ElemType data) //初始化单链表
{
P=(LNode*)malloc(sizeof(LNode));
P->data=data;
P->next=NULL;
return P;
}
LinkList InitList() //创建单链表
{
int i,value,n;
LinkList H=(LinkList)malloc(sizeof(LNode));
LinkList P=H;
P->next=NULL;
do{
printf("请输入链表的长度:");
scanf("%d",&n);
if(n<=0)
printf("输入有误请重新输入!\n");
}while(n<=0);
printf("请输入各个元素:\n");
for(i=0;i<n; i++)
{
scanf("%d",&value);
LinkList NEW=(LinkList)malloc(sizeof(LNode));
NEW->data=value;
P->next=NEW;
NEW->next=NULL;
P=NEW;
}
printf("链表建立成功!\n");
return H->next;
}
LinkList InsertList(LinkList L,int i,ElemType value)//插入一个新结点
{
LinkList h,q,t=NewLNode(t,value);
int x=0;
h=q=L;
if(i==1)
t->next=h,h=t;
else
{
while(x++<i-2)
q=q->next;
t->next=q->next;
q->next=t;
}
printf("插入成功!\n");
return h;
}
Status LocateList(LinkList L,ElemType value)//查找某结点并返回其位置
{
LinkList q=L;
int i=0,t;
while(q!=NULL)
{
i++;
if(q->data==value)
{
printf("该结点在链表中的位置为第%d个\n",i);
return OK;
}
q=q->next;
}
printf("该链表中没有该结点!\n");
return ERROR;
}
LinkList DeleteList(LinkList L,int i)//删除某结点
{
LinkList h,q,de;
int x=0;
h=q=L;
int t;
if(i==1)
{ printf("被删除结点的值为:%d \n",h->data);
h=h->next;
}
else{
while(x++<i-2)
q=q->next;
de=q->next;
printf("被删除结点的值为:%d \n",de->data);
if(de->next==NULL)
q->next=NULL;
else
q->next=de->next;
}
printf("删除成功!\n");
return h;
}
Status Print(LinkList L)//输出此时的链表
{
LinkList q=L;
printf("此时该链表的每个元素为:\n");
while(q!=NULL)
{
printf("%5d",q->data);
q=q->next;
}
printf("\n");
return OK;
}
void main()//主函数
{
LinkList L=InitList();
Print(L);
int n,i,j,a,b;
printf("请输入要插入结点的值和位置:");
scanf("%d %d",&i,&j);
InsertList(L,j,i);
Print(L);
printf("请输入要查找的结点的值:");
scanf("%d",&a);
LocateList(L,a);
printf("请输入要删除结点的位置:");
scanf("%d",&b);
DeleteList(L,b);
Print(L);
system("pause");
}
链表1256756465
最新推荐文章于 2024-09-11 20:39:26 发布