顺序表其实跟数组没啥区别,只是有的时候人们会单独定义一个结构体,结构里面创建一个数组,然后创建一个变量储存结构体的长度。
下面是以结构体类型的顺序表,表中包含了一个结构体类型的数组和数组长度,同时给变量赋值和显示指定数组的功能。
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#define sum 100
//建立元素类型结构体
typedef struct worker
{
string name;
int salary;
};
//建立顺序表
typedef struct
{
worker w[sum];
int num;
}Sqlist;
//创建表中元素
void creatWorker(Sqlist &s)
{
string name;
cin >> name;
s.w[s.num].name = name;
s.w[s.num].salary = rand() % 9999 + 10000;
s.num++;
}
//显示指定元素
void showWorker(Sqlist& s)
{
int a = 0;
while (true)
{
cin >> a;
if (a >0 && a <= s.num)
{
cout << s.w[a-1].name << " " << s.w[a-1].salary << endl;
break;
}
else
{
cout << "请重新输入" << endl;
}
}
}
int main()
{
srand((unsigned)time(NULL));
Sqlist s;
s.num = 0;
creatWorker(s);
showWorker(s);
return 0;
}
下面指针形式创建的顺序表,表中存有一个指针,指向数组首地址,和一个整数,储存数组长度,在给表 赋值时,开辟了指定数量的数组的内存,指针不变,通过加减元素的个数来找到指定元素。
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#define sum 100
//建立元素类型结构体
typedef struct worker
{
string name;
int salary;
};
//建立顺序表
typedef struct
{
worker* w;
int num;
}Sqlist;
//创建表中元素
void creatWorker(Sqlist &s,int num)
{
s.w = new worker[sum];
string name;
cin >> name;
(s.w+num)->name = name;
(s.w+num)->salary = rand() % 9999 + 10000;
s.num++;
}
//显示指定元素
void showWorker(Sqlist& s)
{
int a = 0;
worker* p;
p = s.w;
while (true)
{
cin >> a;
if (a > 0 && a <= s.num)
{
p += (a-1);
cout << p->name << " " << p->salary<< endl;
break;
}
else
{
cout << "请重新输入" << endl;
}
}
}
int main()
{
srand((unsigned)time(NULL));
Sqlist s;
s.num = 0;
creatWorker(s,s.num);
showWorker(s);
return 0;
}