//链表操作(单向链表)
#include<stdio.h>
#include<malloc.h>
//定义链表
typedef struct LNode{ //定义单链表节点类型
int data; //数据域
struct LNode *next; //指针域
}LNode;
//****************建立单链表
//头插法
LNode* CreatListHead(LNode *L){
//从表尾到表头逆向建立单链表L,每次均在头结点之后插入元素
LNode *s;int x;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=9999){
s=malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
//尾插法
LNode* CreatListEnd(LNode *L){
//从表头到表尾正向建立单链表L,每次均在表尾插入元素
int x;
LNode *s,*r;
L=(LNode*)malloc(sizeof(LNode));
r=L;
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
//按序号查找节点值
LNode* GetElemNode(LNode* L,int i){
int j=1;
LNode *p=L->next;
if(i==0)
return L;
if(i<1)
return NULL;
while(p&&j<i){
p=p->next;
j++;
}
if(j!=i) return NULL;
return p;
}
//按值查找节点值
LNode* LocateElem(LNode* L,int e){
LNode *p=L->next;
while(p&&p->data!=e){
p=p->next;
}
return p;
}
//插入节点
void InsertNode(LNode* L,int i,int e){
LNode *p;
LNode *s=(LNode*)malloc(sizeof(LNode));
p=GetElemNode(L,i-1);
s->data=e;
s->next=p->next;
p->next=s;
}
//删除节点
void DeleteNode(LNode* L,int i){
LNode *p;
LNode *s;
p=GetElemNode(L,i-1);
s=p->next;
p->next=s->next;
free(s);
}
//求链表长度
int Length(LNode *L){
LNode *p=L->next;
int i=0;
while(p){
i++;
p=p->next;
}
return i;
}
//输出链表
void PrintList2(LNode *L){
LNode *p=L->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
}
int main(){
LNode *L=NULL;
int e,i;
//L=CreatListHead(L);
//生成链表
printf("***************生成链表***************\n");
printf("输入链表数据(以9999为结束标志)\n");
L=CreatListEnd(L);
printf("输入的链表长度为:");
printf("%d\n",Length(L));
printf("\n链表数据为:");
PrintList2(L);
//插入数据
printf("\n***************插入数据***************");
printf("\n请输入需要插入的节点数据和插入位置:");
scanf("%d %d",&e,&i);
InsertNode(L,i,e);
printf("链表长度为:");
printf("%d\n",Length(L));
printf("\n链表数据为:");
PrintList2(L);
//删除节点
printf("\n***************删除节点***************");
printf("\n请输入需要删除的节点:");
scanf("%d",&i);
DeleteNode(L,i);
printf("链表长度为:");
printf("%d\n",Length(L));
printf("\n链表数据为:");
PrintList2(L);
}
数据结构——单向链表操作
猜你喜欢
转载自blog.csdn.net/agjllxchjy/article/details/81275204
今日推荐
周排行