顺序表 《数据结构》
代码很长很冗杂。。。。
///顺序表
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#define ElemType int
using namespace std;
typedef struct SeqList///定义类型
{
ElemType data[9999];
int Length;
} SqList;
void InitSeqList(SqList &L)///初始化为空
{
for(int i=0;i<100;i++)
{
L.data[i]=0;
}
L.Length=0;
}
void InitList(SqList *&L)///初始化线性表
{
L=(SqList *)malloc(sizeof(SqList));
L->Length=0;
}
void DisplayList(SqList L)///输出顺序表中的数据
{
cout << "顺序表中的数据有:";
for(int i=0; i<L.Length; i++)
{
cout << L.data[i] << " ";
}
cout << endl;
}
void InsertElem(SqList &L,ElemType e,int pos)///在指定位置pos输入数据e
{
if(pos<0||pos>L.Length+1)
{
cout << "位置不合法!";
return;
}
for(int i=L.Length-1; i>=pos-1; i--)
{
L.data[i+1]=L.data[i];
}
L.data[pos-1]=e;
L.Length++;
}
void DestroyList(SqList * &L)///释放空间?不知道如何体现的
{
free(L);
}
bool ListEmpty(SqList *L)///表为空输出1,否则为0
{
return(L->Length==0);
}
int ListLength(SqList *L)///测数据表的长度
{
return(L->Length);
}
bool ListDelete(SqList *&L,int i,ElemType &e)///删除i位置的数据e
{
int j;
if(i<1||i>L->Length)
return false;
i--;
e=L->data[i];
for(j=i; j<L->Length-1; j++)
L->data[j]=L->data[j+1];
L->Length--;
return true;
}
bool GetElem(SqList *L,int i,ElemType &e)///求线性表的某个数据元素值
{
if(i<1||i>L->Length)
return false;
e=L->data[i-1];
return true;
}
int LocateElem(SqList * L,ElemType e)///按元素值e查找位置
{
int i=0;
while(i<L->Length && L->data[i]!=e)
i++;
if(i>=L->Length)
return 0;
else
return i+1;
}
int main()
{
SqList *s1;
InitList(* &s1);///初始化线性表为空
int m[9999];
int n;
cout << "请输入一个n,代表你要输入的数据个数:";
cin >> n;
cout << "请依次输入n个数据:";
for(int i=0; i<n; i++)
{
cin >> m[i];
InsertElem(*s1,m[i],1);///插入数据
}
DisplayList(*s1);///输出数据
bool a=GetElem(s1,2,m[2]);
cout << a << endl;///表数据的值存在
int x=LocateElem(s1,m[1]);///m[1]的位置
cout << x << endl;
InitList(* &s1);///清空数据
DisplayList(*s1);
bool b = ListDelete(* &s1,2,m[2]);///删除第二个位置的m[2].
DisplayList(*s1);
InsertElem(*s1,45,1);///在第1个位置插入45
DisplayList(*s1);
int c=ListLength(* &s1);///测长度
cout << c << endl;
/// bool x = DestroyList(* &s1);///释放数据???
DisplayList(*s1);
bool d=ListEmpty(* &s1);///判断是否为空1空
cout << d << endl;
return 0;
}