线性表之顺序表

一、线性表的定义
        从逻辑结构的角度来讲,线性表中各个元素之间是唯一的、并且有序排列的关系。
        从存储结构的角度来看,线性表的具体实现过程中可采用顺序存储结构和链式存储结构。

        顺序存储结构的线性表称为顺序表,链式存储结构的线性表分为单链表和双链表。

二、顺序表

#include "stdafx.h"
#include "head.h"
using namespace std;

#define MAXSIZE  100

//功能:顺序表的线性存储结构中存的内容
 
typedef struct 
{
char Info[20];
}dataType;

//功能:顺序表的线性存储结构
typedef struct _SeqList 
{
dataType data[MAXSIZE];
int len;//线性表长度
}SeqList, *pSeqList;

//功能:头文件包含
 
void InitList(pSeqListL);
bool InsertList(pSeqList L, int i, dataType x);
void display(pSeqList  L);
bool Delete(pSeqList L, int i);
dataType GetNode(pSeqList L, int i);
int FindNode(pSeqList  L,  dataType*  pNode);

int _tmain(int argc, _TCHAR* argv[])
{
int i, len;
dataType node;
SeqList  List;
len = sizeof(List);
InitList(&List);
for (i = 1; i < 6; i++)
{
ZeroMemory(&node, sizeof(dataType));
strcpy(node.Info, "hello");
InsertList(&List, i, node);
}
ZeroMemory(&node, sizeof(dataType));
strcpy(node.Info, "hello2");
InsertList(&List, 6, node);
for (i = 7; i < 9; i++)
{
ZeroMemory(&node, sizeof(dataType));
strcpy(node.Info, "hello1");
InsertList(&List, i, node);
}
display(&List);
ZeroMemory(&node, sizeof(dataType));
strcpy(node.Info, "hello2");
i = FindNode(&List, &node);
return 0;
}

//功能:顺序表的初始化
 
void InitList(pSeqListL)
{
memset(L, 0, sizeof(SeqList));
}

//功能:顺序表的插入运算
//在表的第i个元素与第i+1个元素之间插入x, 第i+1个之后的元素全部后移一位
//a0 a1 a2 a3 ...       a(i-1)      ai      a(i+1)  ...  a(n-1)
//1    2   3   4               i       i+1                       n  (len = n)
 
bool InsertList(pSeqList L, int i, dataType x)
{
int j;
if (L->len > (MAXSIZE - 1))
{
printf("列表已经溢出\n");
return false;
}
else if (i < 1 || i > (L->len + 1))
{
printf("插入位置不合法");
return false;
}
else 
{
for (j = L->len - 1; j > i - 2; j--)
{
L->data[j+1] = L->data[j];
}
L->data[i-1] = x;
L->len++;
return true;
}
}

//功能:顺序表的显示
 
void display(pSeqList  L)
{
int i;
if (L->len == 0)
{
cout<<"顺序表无数据\n";
return;
}
for (i = 0; i < L->len; i++)
{
cout<<L->data[i].Info<<endl;
}
}

//功能:顺序表的删除运算
//删除表的第i个元素, 第i+1个之后的元素全部前移一位
//a0 a1 a2 a3 ...       a(i-1)      ai      a(i+1)  ...  a(n-1)
//1    2   3   4               i       i+1                       n  (len = n)
 
bool  Delete(pSeqList L, int i)
{
int j;
if (L->len == 0)
{
printf("empty List");
return false;
}
else if (i < 1 || i > L->len )
{
printf("删除越界");
return false;
}
else
{
for (j = i ; j < L->len; j++)
{
L->data[j-1] = L->data[j];
}
L->len--;
return true;
}
}

//功能:按序号取节点
 
dataType GetNode(pSeqList L, int i)
{
dataType* pdata = new dataType;
ZeroMemory(pdata, sizeof(dataType));
if (i < 1 || i > L->len)
{
printf("越界");
return *pdata;
}
return *pdata = L->data[i-1];
}

//功能:节点查询
 
int FindNode(pSeqList  L,  dataType*  pNode)
{
int i;
for (i = 0; i < L->len; i++)
{
if (strcmp(L->data[i].Info, pNode->Info) == 0)
{
return i+1;
}
}
return 0;
}
posted @ 2016-03-24 16:05  SuperThinker  阅读(6)  评论(0编辑  收藏  举报  来源