您的位置:首页 > 理论基础 > 数据结构算法

数据结构 单链表插入删除操作(c语言实现)

2015-11-29 16:46 801 查看
#include "stdlib.h"
#include "stdio.h"

typedef struct LNode{
int data;
struct LNode *next;

}LNode,*LinkList;

void Create_List(LinkList &L){
int data;
LinkList p,q;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;

q=L;
scanf("%d",&data);
while(data!=0){
p=(LinkList)malloc(sizeof(LNode));
p->data=data;
p->next=q->next;
q->next=p;
q=p;
scanf("%d",&data);
}
q=L;
}

void TranverseList(LinkList L){
LinkList p;
p=L->next;
if(p==NULL){
printf("null\n");
return;
}
while(p!=NULL){
printf("%d,",p->data);
p=p->next;
}
printf("\n");
}
void ListDelet(LinkList &L,int delElem){
LinkList p,temp;
p=L;
int tag=0;
while(p->next!=NULL){
if(p->next->data==delElem){
temp=p;
tag=1;
break;
}
p=p->next;
}
if(tag==0){
return ;
}
if(temp->next->next==NULL&&tag==1){
temp->next=NULL;
}else if(tag==1){
temp->next=p->next->next;
}

}
void Insert(LinkList &L,int elem){
LinkList p;
LinkList s;
p=L;
s=(LinkList)malloc(sizeof(LNode));
s->data=elem;
s->next=NULL;
while(p->next!=NULL){
if(p->next->data==elem) break;
if(p->next->data>elem){
s->next=p->next;
p->next=s;
break;
}
p=p->next;
}
if(p->next==NULL&&p->data<elem){
p->next=s;
}
}
int main(){

LinkList L;
Create_List(L);
printf("插入前:");
TranverseList(L);
Insert(L,4);
Insert(L,1);
Insert(L,10);
Insert(L,3);
printf("插入4,1,10,3后:");
TranverseList(L);
ListDelet(L,5);
ListDelet(L,1);
ListDelet(L,10);
ListDelet(L,8);
printf("删除5,1,10,8后:");
TranverseList(L);
Insert(L,4);
printf("插入4后:");
TranverseList(L);
ListDelet(L,2);
printf("删除2后:");
TranverseList(L);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息