实现单链表的基本操作:
#include<stdio.h>
#include<malloc.h> //动态存储分配头文件
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef struct LNode{
int data;
LNode *next;
} LNode ,*LinkList;
//创建链表
void CreateList_L(LinkList &L,int n){ //使用头插法创建链表,输出的结果与时间相反。
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL; //先建立一个带有头节点的单链表
LinkList p;
for(int i=n;i>0;i--){
p=(LinkList)malloc(sizeof(LNode));
printf("请输入插入的数值");
scanf("%d",&p->data); //输入要插入的数据的data
p->next=L->next;
L->next=p; //头插法移动链表
}
}
//输出链表
void printL(LinkList L){
LinkList p;
p=L->next;
while(p!=NULL){ //遍历链表P中的所有data
printf("%d",p->data);
p=p->next;
}
}
//在指定位置插入数据元素
int InsertList_L(LinkList &L,int i,ElemType e){
LinkList p;
p=L;
int j;
while(p && j<i-1){
p=p->next;
++j;
}
if(!p || j>i-1)
return ERROR;
LinkList s;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
//删除第i个元素
int DeleteList_L(LinkList L,int i,ElemType e){
LinkList p,q;
p=L;
int j;
while (p->next && j<i-1){ //遍历链表找到删除的节点
p=p->next;
++j;
}
if(!(p->next) || j>i-1)
return ERROR;
q=p->next; //删除节点
p->next=q->next;
e=q->data; //释放删除节点的空间
free(q);
return OK;
}
//查找第i个元素的数值
int FindList_L(LinkList L,int i,ElemType e){
LinkList p;
p=L;
int j;
while (p->next && j<i-1){
p=p->next;
++j;
}
if(!(p->next) || j>i-1)
return ERROR;
e=p->data;
return OK;
}
int main(){
LinkList L;
CreateList_L(L,4); //创建长度为4的链表
printL(L); //输出链表L
printf("\n");
int insert;
printf("请输入要插入的元素:");
scanf("%d",&insert);
InsertList_L(L,2,insert);
printf("插入后的链表元素为:");
printL(L);
printf("\n");
int i;
int d;
printf("请输入要删除的元素的位置:");
scanf("%d",&i);
DeleteList_L(L,i,d);
printL(L);
printf("\n");
printf("请输入要查找的位置:");
int a;
int s;
scanf("%d",&a);
FindList_L(L,a,s);
printf("%d",s);
}
其中有一个问题查找某一个位置的元素,输出不合适。