一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二..实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
要求如下:
2)用静态链表来实现。
三、源代码
#include<iostream>
using namespace std;
#define MAXSIZE 100
typedef int T;
typedef struct Node
{
T data;
int cur;
} StaticLinkList[MAXSIZE];
bool InitList(StaticLinkList array)
{
cout << "InitList..." << endl;
for (int i = 0; i < MAXSIZE - 2; i++)
{
array[i].cur = i + 1;
}
array[MAXSIZE - 2].cur = 0;
array[MAXSIZE - 1].cur = 0;
return true;
}
int Malloc_SLL(StaticLinkList array)
{
int k = array[0].cur;
if (k)
array[0].cur = array[k].cur;
return k;
}
void Free_SLL(StaticLinkList array, int pos)
{
array[pos].cur = array[0].cur;
array[0].cur = pos;
}
int ListLength(StaticLinkList array)
{
int i = array[MAXSIZE - 1].cur;
int j = 0;
while(i)
{
i = array[i].cur;
++j;
}
return j;
}
bool ListInsert(StaticLinkList array, int pos, T Elem)
{
cout << "Insert List from pos: " << pos << " Item " << Elem << endl;
if (pos < 1 || pos > ListLength(array) + 1)
return false;
int k = MAXSIZE - 1;
int i = Malloc_SLL(array);
if (i)
{
array[i].data = Elem;
for (int l = 1; l <= pos - 1; l++)
k = array[k].cur;
array[i].cur = array[k].cur;
array[k].cur = i;
return true;
}
return false;
}
bool ListDelete(StaticLinkList array, int pos)
{
cout << "Delete List from pos: " << pos << endl;
if (pos < 1 || pos > ListLength(array))
return false;
int k = MAXSIZE - 1;
for (int l = 1; l <= pos - 1; l++)
k = array[k].cur;
int j = array[k].cur;
array[k].cur = array[pos].cur;
Free_SLL(array, j);
return true;
}
bool ListTraverse(StaticLinkList array)
{
cout << "List Traverse : " << endl;
int k = MAXSIZE - 1;
while (array[k].cur != 0)
{
k = array[k].cur;
cout << array[k].data << ' ';
}
cout << endl;
return true;
}
int main()
{
StaticLinkList SSL;
InitList(SSL);
for (int i = 1; i < 5; i++)
ListInsert(SSL, i, i);
ListTraverse(SSL);
ListDelete(SSL, 3);
ListTraverse(SSL);
cout << "List Length : " << ListLength(SSL) << endl;
return 0;
}
四、实验结果