#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList L;
LNode *p;
void CreateList_F(int n){
int i;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
printf("逆位序输入元素的个数:\n");
scanf("%d",&n);
for(i=n;i>0;--i){
p=(LNode*)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;L->next=p;
}
p=L->next;
while(p!= NULL)
{
printf("%3d",p->data);
p = p->next;
}
printf("输出完毕\n");
}
void LocateElem_L(ElemType e){
int i,j=0;
p=L->next;
printf("请输入要查找元素的值\n");
scanf("%d",&e);
while(p&&p->data!=e){
p=p->next;
j++;
}
if(p==NULL)
printf("查找失败!\n");
else
printf("找到,下标为%d\n",j);
p=L->next;
while(p!=NULL)
{
printf("%3d",p->data);
p = p->next;
}
printf("输出完毕\n");
}
void ListInsert_L(int i,ElemType e){
LNode *s;
int j=0;
printf("请输入元素值与其要插到到第几个位置之前\n");
scanf("%d%d",&e,&i);
p=L;
while(p&&j<i-1){
p=p->next;
++j;
}
if(!p||j>i-1)
printf("ERROR\n");
s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
printf("插入成功!\n");
p=L->next;
while(p!=NULL)
{
printf("%3d",p->data);
p = p->next;
}
printf("输出完毕\n");
}
void ListDelete_L(int i,ElemType e){
int j=0;
LNode *q;
p=L;
printf("请输入要删除的元素值的位置\n");
scanf("%d",&i);
while(p->next&&j<i-1){
p=p->next;
++j;
}
if(!(p->next)||j>i-1)
printf("ERROR\n");
q=p->next;
p->next=q->next;
e=q->data;
printf("删除成功!\n");
printf("删除后链表为结果为\n");
p=L->next;
free(q);
while(p!=NULL)
{
printf("%3d",p->data);
p=p->next;
}
printf("输出完毕\n");
}
void main(){
int n,e,i,j;
CreateList_F(n);
printf("建立链表成功!\n");
LocateElem_L(e);
printf("查找操作完毕!\n");
ListInsert_L(i,e);
printf("插入操作完毕!\n");
ListDelete_L(i,e);
printf(" 删除操作完毕!\n");
free(p);
}
#include<malloc.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList L;
LNode *p;
void CreateList_F(int n){
int i;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
printf("逆位序输入元素的个数:\n");
scanf("%d",&n);
for(i=n;i>0;--i){
p=(LNode*)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;L->next=p;
}
p=L->next;
while(p!= NULL)
{
printf("%3d",p->data);
p = p->next;
}
printf("输出完毕\n");
}
void LocateElem_L(ElemType e){
int i,j=0;
p=L->next;
printf("请输入要查找元素的值\n");
scanf("%d",&e);
while(p&&p->data!=e){
p=p->next;
j++;
}
if(p==NULL)
printf("查找失败!\n");
else
printf("找到,下标为%d\n",j);
p=L->next;
while(p!=NULL)
{
printf("%3d",p->data);
p = p->next;
}
printf("输出完毕\n");
}
void ListInsert_L(int i,ElemType e){
LNode *s;
int j=0;
printf("请输入元素值与其要插到到第几个位置之前\n");
scanf("%d%d",&e,&i);
p=L;
while(p&&j<i-1){
p=p->next;
++j;
}
if(!p||j>i-1)
printf("ERROR\n");
s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
printf("插入成功!\n");
p=L->next;
while(p!=NULL)
{
printf("%3d",p->data);
p = p->next;
}
printf("输出完毕\n");
}
void ListDelete_L(int i,ElemType e){
int j=0;
LNode *q;
p=L;
printf("请输入要删除的元素值的位置\n");
scanf("%d",&i);
while(p->next&&j<i-1){
p=p->next;
++j;
}
if(!(p->next)||j>i-1)
printf("ERROR\n");
q=p->next;
p->next=q->next;
e=q->data;
printf("删除成功!\n");
printf("删除后链表为结果为\n");
p=L->next;
free(q);
while(p!=NULL)
{
printf("%3d",p->data);
p=p->next;
}
printf("输出完毕\n");
}
void main(){
int n,e,i,j;
CreateList_F(n);
printf("建立链表成功!\n");
LocateElem_L(e);
printf("查找操作完毕!\n");
ListInsert_L(i,e);
printf("插入操作完毕!\n");
ListDelete_L(i,e);
printf(" 删除操作完毕!\n");
free(p);
}