顺序表包括两种存储方式:1.顺序存储,随机读取(顺序表).2.随机存储,顺序读取(链式表)
// 顺序表链式存储.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef int Elemtype;
struct _List
{
Elemtype data;
_List *next;
};
//初始化线性表
void InitList(_List *&Hl)
{
Hl = NULL;
}
//删除线性表
void ClearList(_List *&Hl)
{
_List *cp, *np;
cp = Hl;
while (cp)
{
np = cp->next;
delete cp;
cp = np;
}
Hl = NULL;
}
//得到单链表的长度
int LengthList(_List *Hl)
{
int i = 0;
while (Hl)
{
i++;
Hl = Hl->next;
}
return i;
}
//检测单链表是否为空
bool EmptyList(_List* Hl)
{
return Hl == NULL;
}
//得到单链表中第poc个节点的元素
Elemtype GetList(_List *Hl, int pos)
{
if (pos < 1)
{
cout << "Pos is invalid" << endl;
exit(1);
}
int i = 0;
while (Hl)
{
i++;
if (i==pos)
{
break;
}
Hl = Hl->next;
}
if (Hl)
{
return Hl->data;
}
else
{
cout << "Pos is out range" << endl;
exit(1);
}
}
//遍历单链表
void TraverseList(_List *Hl)
{
while (Hl)
{
cout << Hl->data << " ";
Hl = Hl->next;
}
cout << endl;
}
//查找是否具有该元素
bool FindList(_List *Hl, Elemtype item)
{
while (Hl)
{
if (Hl->data == item)
{
return true;
}
else
{
Hl = Hl->next;
}
}
return false;
}
//更新某个元素
bool UpdateList(_List *HL, const Elemtype &item)//更新某个元素
{
while (HL)
{
if (HL->data == item) break;
else HL = HL->next;
}
if (!HL) return false;
else
{
HL->data = item;
return true;
}
}
//在pos位置插入一个元素
bool InsertList(_List *&HL, Elemtype item, int pos)//插入一个元素
{
if (pos < -1)
{
cout << "pos is invalid" << endl;
return false;
}
_List *newpt;
newpt = new _List;
newpt->data = item;
_List *cp = HL, *ap = NULL;
if (pos == 0)
{
while (cp)
{
if (item < cp->data) break;
else
{
ap = cp;
cp = cp->next;
}
}
}
else if (pos == -1)
while (cp)
{
ap = cp;
cp = cp->next;
}
else
{
int i = 0;
while (cp)
{
i++;
if (i == pos) break;
else
{
ap = cp;
cp = cp->next;
}
}
if (cp == NULL&&i + 1 < pos)
{
cout << "pos is rang out" << endl;
return false;
}
}
if (ap == NULL)
{
newpt->next = HL;
HL = newpt;
}
else
{
newpt->next = cp;
ap->next = newpt;
}
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}