基本操作:
1.初始化
2.单链表创建
3.插入操作
4.删除操作
5.按值查找
6.按位置查找
7.输出
#include <iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode* next;
}LNode, * LinkList; //LinkList等价于LNode*
//初始化
bool InitList(LinkList& L){
L = (LinkList)malloc(sizeof(LNode));
if (L == NULL)
return false;
L->next = NULL;
return true;
}
//单链表的创建
void CreateList1(LinkList& L, int n) { //头插法
LinkList p;
for (int i = n; i > 0; i--) {
p = (LinkList)malloc(sizeof(LNode));
scanf_s("%d", &p->data);
p->next = L->next;
L->next = p;
}
}
void CreateList2(LinkList& L, int n) { //尾插法
L = (LinkList)malloc(sizeof(LNode));
LinkList p, r;
r = L;
for (int i = n; i > 0; i--) {
p = (LinkList)malloc(sizeof(LNode));
cin >> p->data;
r->next = p;
r = p;
}
r->next = NULL; //最后一个结点指针指向NULL
}
//插入操作
bool InsertList(LinkList &L, int i, int e) {
if (i < 1)return false;
LinkList p;
int j;
p = L, j = 0;
while (p&& j<i - 1) {
p = p->next;
j++;
}
if (!p || j > i - 1) return false;
LinkList s;
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
//删除操作
bool DeleteList(LinkList L, int i) {
LinkList p, s;
p = L;
int j = 0;
while (p->next && j < i - 1) {
p = p->next;
j++;
}
if (!(p->next) || j > i - 1)return false;
s = p->next;
p->next = s->next;
free(s);
return true;
}
//按值查找
int GetElem_L(LinkList& L, int i, int& e) {
LinkList p;
int j;
p = L, j = 0;
while (p && j < i - 1) {
p = p->next, j++;
}
if (!p || j > i - 1) return false;
e = p->next->data;
}
//按位址查找
void Locate_L(LinkList& L, int e) {
LinkList p;
int j;
p = L, j = 0;
while (1) {
p = p->next; j++;
if (p->data == e) {
cout << "位置为:" << j << endl;
break;
}
}
}
//输出
void printList(LinkList& L) {
LinkList p;
p = L->next;
while(p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main() {
LinkList L;
InitList(L);
int n ;
cout << "初始数据元素个数n=";
cin >> n;
cout << "请输入单链表数据:";
CreateList2(L, n); //用的尾插法
int choice, i, e;
do{
cout << "输入选择(1.插入,2.删除,3.按位查找,4.按值查找,5.输出,6.结束进程)choice=";
cin >> choice;
switch (choice) {
case 1:
cout << "输入插入位置和元素:";
cin >> i >> e;
InsertList(L, i, e);
break;
case 2:
cout << "输入删除位置:";
cin >> i;
DeleteList(L, i);
break;
case 3:
cout << "输入查找位置:";
cin >> i;
cout << "查找元素为:" << GetElem_L(L, i, e) << endl;
break;
case 4:
cout << "输入查找元素:";
cin >> e;
Locate_L(L, e);
break;
case 5:
cout << "输出链表:" << endl;
printList(L);
break;
case 6:
exit(1);
default:
cout << "不存在" << endl;
}
} while (1);
system("pause");
return 0;
}
运行结果: