主函数为:
#include <iostream>
using namespace std;
typedef int eletype;
struct Node
{
eletype data;
Node * next;
};
//typedef struct Node *LinkList;
void createLinkList(Node * L, int n);
void showLinkList(const Node * L, int n);
void insertLinkList(Node * L, int location, Node * e, int & n);
void deleteLinkList(Node * L, int location, int & n);
void clearLinkList(Node * L, int & n);
int main()
{
int number;
cout << "Please enter the number of linklist: ";
cin >> number;
Node * LinkList; //链表的头指针
LinkList = (Node *)malloc(sizeof(Node)); //为链表动态分配存储空间
LinkList->next = NULL;
LinkList->data = number; //头指针的初始化
createLinkList(LinkList, number);
showLinkList(LinkList, number);
//实现在第loaction1位置处插入节点e
int location1;
cout << "Please enter a location of insert: ";
cin >> location1;
while (location1<=0 || location1>number+1)
{
cout << "The loaction input is error, please enter a location ranges 1 to " << number+1 << endl;
cout << "Please enter a location again: ";
cin >> location1;
}
Node * e;
e = (Node *)malloc(sizeof(Node));
cout << "Please enter the element of insert: ";
cin >> e->data;
insertLinkList(LinkList, location1, e, number);
showLinkList(LinkList, number);
//实现在location2位置处实现删除节点e
int location2;
cout << "Please enter a location of delete: ";
cin >> location2;
while (location2<=0 || location2>number)
{
cout << "The loaction input is error, please enter a location ranges 1 to " << number << endl;
cout << "Please enter a location again:";
cin >> location2;
}
deleteLinkList(LinkList, location2, number);
showLinkList(LinkList, number);
//实现单链表的整表删除
clearLinkList(LinkList, number);
cout << "The number of data is " << number << endl;
system("pause");
return 0;
}
创建线性表的链式存储结构表函数为:
void createLinkList(Node * L, int n)
{
Node * p;
for (int i = 0; i < n; i++)
{
p = (Node *)malloc(sizeof(Node));
cout << "Please enter the data of " << n-i << "-th:";
cin >> p->data;
p->next = L->next;
L->next = p;
}
}
对链式存储结构插入一个节点函数为:
void insertLinkList(Node * L, int location, Node * e, int & n)
{
for (int i = 0; i < location-1; i++)
{
L = L->next;
}
e->next = L->next;
L->next = e;
n++;
}
对链式存储结构删除一个节点的函数为:
void deleteLinkList(Node * L, int location, int & n)
{
Node * e;
for (int j = 0; j < location-1; j++)
{
L = L->next;
}
e = L->next;
cout << "The delete emelemt is " << e->data << endl;
L->next = e->next;
free(e);
n--;
}
显示链式存储结构中的元素和地址的函数为:
void showLinkList(const Node * L, int n)
{
Node * p;
p = L->next;
for (int i = 0; i < n; i++)
{
cout << "the data of " << i+1 << "-th is " << p->data << endl;
cout << "The " << i+1 << "-th address is " << p << endl;
p = p->next;
}
}
单链表整表删除的函数为:
void clearLinkList(Node * L, int & n)
{
int number = n;
for (int i = 0; i < number; i++)
{
Node * q;
q = L->next;
L->next = q->next;
free(q);
n--;
}
L->next = NULL;
}
这是我自己的代码实现,如果你有什么好的代码实现方法希望可以互相学习。