- 设计整数单链表的基本运算程序,并用相关数据进行测试。具体步骤如下:
(1)定义单链表类型SLinkNode;
(2)编写子函数InitList(SLinkNode *&L),实现单链表的初始化;
(3)编写子函数CreateList(SLinkNode *&L),实现单链表的创建,从键盘上依次输入整型数据元素,创建单链表;
(4)编写子函数InsElem(SLinkNode *&L, int x, int i),实现单链表中的插入运算;
(5)编写子函数DelElem(SLinkNode *&L, int i),实现单链表中的删除运算;
(6)编写子函数GetLength(SLinkNode *L),实现计算单链表的长度;
(7)编写子函数DispList(SLinkNode *L),实现单链表的打印输出;
(8)编写主函数,在主函数中调用上述子函数,输出相应的结果。
#include<iostream>
#include<malloc.h>
using namespace std;
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node* next;
}SLinkNode;
void InitList(SLinkNode*& L)
{
L =(SLinkNode*)malloc(sizeof(SLinkNode));
L->next = NULL;
}
void CreatListF(SLinkNode*& L, ElemType a[], int n)
{
SLinkNode* s,* tc;
int i;
L = (SLinkNode*)malloc(sizeof(SLinkNode));
tc = L;
for (i = 0; i < n; i++)
{
s = (SLinkNode*)malloc(sizeof(SLinkNode));
s->data = a[i];
tc->next = s;
tc = s;
}
tc->next = NULL;
}
int InsElem(SLinkNode*& L, ElemType x, int i)
{
int j = 0;
SLinkNode* p = L, * s;
if (i <= 0) return 0;
while (p != NULL && j < i - 1)
{
j++;
p = p->next;
}
if (p == NULL)
return 0;
else
{
s = (SLinkNode*)malloc(sizeof(SLinkNode));
s->data = x;
s->next = p->next;
p->next = s;
return 1;
}
}
int DelElem(SLinkNode*& L, int i)
{
int j = 0;
SLinkNode* p = L, * q;
if (i <= 0)
return 0;
while (p != NULL && j < i - 1)
{
j++;
p = p->next;
}
if (p == NULL)
return 0;
else
{
q = p->next;
if (q == NULL)
return 0;
else
{
p->next = q->next;
free(q);
return 1;
}
}
}
int GetLength(SLinkNode* L)
{
int i = 0;
SLinkNode* p = L->next;
while (p != NULL)
{
i++;
p = p->next;
}
return 1;
}
void DispList(SLinkNode* L)
{
SLinkNode* p = L->next;
while (p != NULL)
{
printf("%d", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
SLinkNode* L;
InitList(L);
ElemType a[100];
int i, n;
cout << "输入元素个数:" << endl;
cin >> n;
cout << "依次输入元素:" << endl;
for (i = 0; i < n; i++)
{
cin >> a[i];
}
CreatListF(L, a, n);
int x, b, c;
cout << "请输入插入元素" << endl;
cin >> x;
cout << "请输入插入位置" << endl;
cin >> b;
InsElem(L, x, b);
cout << "请输入删除位置" << endl;
cin >> c;
DelElem(L, c);
DispList(L);
return 0;
}