1.头文件
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
2.初始化单链表
typedef struct LNode{
ElemType data;
struct LNode * next;
}LinkNode;
LinkNode *p;
p = (LinkNode * ) malloc(sizeof(LinkNode));
p -> next = NULL;
3.尾插法插入a、b、c、d、e元素
void CreateLNode(LinkNode * L,ElemType a[],int n){
LinkNode *p,*q;
p = L;
for (int i = 0; i < n; ++i) {
q = (LinkNode * ) malloc(sizeof(LinkNode));
q -> data = a[i];
p -> next = q;
p = q;
printf("插入成功%c\n",a[i]);
}
p -> next = NULL;
}
4.输出单链表
void DisLNode(LinkNode * L){
LinkNode *p = L -> next;
while (p != NULL){
printf("%c ",p -> data);
p = p -> next;
}
printf("\n");
}
5.输出单链表的长度
int LengthLNode(LinkNode * L){
if(L -> next == NULL){
printf("链表为空\n");
return 0;
}
else{
int n = 0;
while (L -> next != NULL){
n++;
L = L -> next;
}
printf("长度为%d\n",n);
return n;
}
}
6.判断单链表是否为空
bool EmptyLNode(LinkNode * L){
if(L -> next == NULL){
printf("链表为空\n");
return false;
}
else{
printf("链表不为空\n");
return true;
}
}
7.输出单链表的第3个元素
bool GetLNode(LinkNode * L,int i,ElemType x){
LinkNode *p = L -> next;
for (int j = 1; j < i; ++j) {
if(p == NULL){
printf("位置不合法\n");
return false;
}
else
p = p -> next;
}
if(p == NULL){
printf("位置不合法\n");
}
else{
printf("第%d个是%c\n",i,p -> data);
}
}
8.输出元素a的位置
bool GetLNodeF(LinkNode * L,ElemType x){
LinkNode *p = L -> next;
int cnt = 1;
while (p != NULL && p -> data != x) {
p = p->next;
cnt++;
}
if(p != NULL){
printf("%c在第%d位\n",x,cnt);
return true;
}
else{
printf("查无此值\n");
return false;
}
}
9.在第4个位置上插入f元素
bool InsertLNode(LinkNode * L,int i,ElemType x){
if(i <= 0) {
printf("位置不合法\n");
return false;
}
LinkNode *p = L -> next,*q;
int j; i--;
for (j = 1;j < i; ++j) {
if(p == NULL){
printf("位置不合法\n");
}
else p = p -> next;
}
q = (LinkNode * ) malloc(sizeof(LinkNode));
q -> data = x;
if(p -> next != NULL)
q -> next = p -> next;
p -> next = q;
printf("%c插入成功\n",x);
return true;
}
10.输出单链表
11.删除单链表的第3个元素
bool DelLNode(LinkNode * L,int i,ElemType x){
if(i <= 0){
printf("位置不合法\n");
return false;
}
LinkNode * p = L -> next,*q;
int j; i--;
for (j = 1; j < i; ++j) {
if(p == NULL){
printf("位置不合法\n");
return false;
} else p = p -> next;
}
q = p -> next;
if(q == NULL)
return false;
x = q -> data;
p -> next = q -> next;
free(q);
printf("%c删除成功\n",x);
return true;
}
12.输出单链表
13.释放单链表
void DestroyLNode(LinkNode * L){
LinkNode *pre = L,*p = L -> next;
while (p != NULL){
free(pre);
pre = p;
p = pre -> next;
}
free(pre);
printf("销毁成功\n");
}
14.主函数
int main(){
LinkNode *p;
p = (LinkNode * ) malloc(sizeof(LinkNode));
p -> next = NULL;
ElemType ch[5] = {'a','b','c','d','e'};
CreateLNode(p,ch,5);
DisLNode(p);
LengthLNode(p);
EmptyLNode(p);
ElemType x;
GetLNode(p,3,x);
GetLNodeF(p,'a');
InsertLNode(p,4,'f');
DisLNode(p);
DelLNode(p,3,x);
DisLNode(p);
DestroyLNode(p);
return 0;
}