# 【数据结构】单链表的实现和基本操作

1. 构建空表
2. 插入元素
3. 删除元素
4. 查找元素
5. 交换相邻元素
``````#include<stdio.h>
#include<stdlib.h>
#include "malloc.h"

#define TRUE         1
#define FALSE        0
#define OK           1
#define ERROR        0
#define INFEASIBLE   -1
#define OVERFLOW     -2

typedef int Status;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,* Linklist;

Status InitList(Linklist &L){
//构造空表
L = (Linklist)malloc(sizeof(LNode));
L->data = NULL;
L->next = NULL;
}
Status ListInsert_L(Linklist &L,int i){
//在带头结点的单链线性表L中第i个位置插入键盘输入的数
int e,j = 0;
scanf("%d",&e);
Linklist p;
p = L;
while(p && j < i-1){p = p->next; ++j;} //找到链表中第i-1个元素
if(!p || j>i-1)return ERROR;
Linklist s = (Linklist)malloc(sizeof(LNode));
s->data = e;s->next = p->next;
p->next = s;
return OK;
}
Status Elem_search(Linklist L){
//查找链表中指定元素
printf("您要查找哪个位置的数\n");
int i,j = 0;
Linklist p = L;
scanf("%d",&i);
while(p && j < i) {p = p->next;++j;} //找到链表中第i个元素
if(!p || j > i)return ERROR;
printf("您查找的数是：%d\n",p->data);
return OK;
}
Status List_print(Linklist L){
//打印链表
Linklist p;
p = L;
printf("现有的单链表为:\n");
p = p->next;
while(p->next != NULL) {printf("%d ",p->data);p = p->next;}
printf("%d ",p->data);
printf("\n");
return OK;
}
Status ListDelete_L(Linklist &L){
//删除指定元素，并输出
printf("请输入要删除元素的位置：\n");
int i;
scanf("%d",&i);
Linklist p = L;
int j = 0;
while(p->next && j<i-1){p = p->next;++j;} //找到链表中第i-1个元素
if(!(p->next)||j>i-1)return ERROR; //保证链表有第i个元素
Linklist q = p->next;
p->next = q->next;
printf("%d被删除了\n",q->data);
free(q);
return OK;
}
Status List_exchange(Linklist &L){
//交换指定元素与他后面一个元素的值
printf("请输入要交换元素的位置：\n");
int a,b,j = 0;
scanf("%d",&a);
Linklist p = L;
while(p && j<a){p = p->next;++j;} //找到链表第a个元素
if(!(p->next)||j>a)return ERROR; //保证链表有第a+1个元素
b = p->data;p->data = p->next->data;p->next->data = b;
printf("位置%d和位置%d交换了\n",a,a+1);
return OK;
}
int main(){
Linklist L;
InitList(L);
printf("请依次输入四个整数：\n");
for(int r=1;r <= 4;r++)ListInsert_L(L,r);
List_print(L);
printf("请输入插入的位置和数(用换行分开)：\n");
int a;
scanf("%d",&a);
ListInsert_L(L,a);
List_print(L);
Elem_search(L);
ListDelete_L(L);
List_print(L);
List_exchange(L);
List_print(L);
}``````