1、本节学习要点:
- (1).基本定义
- (2).基本运算
- (3).经典案例:A与B的并集
.2、基本定义:
3、基本运算:
#include<iostream.h>
typedef int datatype;//结点的数据类型,假设为int
const int maxsize=100;//最大表长度,假设为100
typedef struct {
datatype data[maxsize]; //第一个结点是data[0]
int n; //当前长度
} sqlist; //顺序表类型
//将x插入到顺序表L的第i个位置上
int insert(sqlist *L,datatype x,int i){
int j;
if(L->n==maxsize)
{cout<<"表满,不能插入!(上溢)\n";return 1;}
if(i<1 || i>L->n+1)
{cout<<"非法插入位置!\n";return 0;}
for(j=L->n;j>=i;j--)
L->data[j]=L->data[j-1]; //结点后移
L->data[i-1]=x; //插入x,第i个结点的数组下标是i-1
L->n++; //修改表长
return 1; //插入成功
}
//从顺序表中删除第i个位置上的结点
int deletes(sqlist *L,int i){
int j;
if(L->n==0)
{cout<<"表空,不能删除!(下溢)\n";return 1;}
if(i<1 || i>L->n)
{cout<<"非法删除位置!\n";return 0;}
for(j=i+1;j<=L->n;j++)
L->data[j-2]=L->data[j-1]; //结点前移
L->n--; //修改表长
return 1; //删除成功
}
//从顺序表中定位数据
int locate(sqlist *L,datatype x) {
int i;
i=1;
while(i<=L->n && L->data[i-1]!=x) i++;
if(i<=L->n) return i; //找到
else return 0; //未找到
}
//输出顺序表
void print(sqlist *L){
cout<<"The sqlist is: "<<endl;
for(int i=0;i<L->n;i++){
cout<<L->data[i]<<" ";
}
cout<<endl;
}
void main(){
int d[10]={1,1,2,3,4,7,8,9,6,5};//数据源,当然也可以通过输入,这里不写了
sqlist *L=new sqlist;//实例化sqlist类型
L->n=10;
//顺序表中的字符初始化
for(int i=0;i<10;i++){
L->data[i]=d[i];
}
cout<<"Before insert..."<<endl;
print(L);
//调用插入
cout<<"After insert..."<<endl;
insert(L,17,5);
print(L);
//调用删除
// deletes(L,2);
//调用定位
// locate(L,2)
}
4、经典案例:A与B的并集:
#include<iostream.h>
typedef int datatype; //线性表结点的数据类型
const int maxsize=100; //线性表可能的最大长度,假设为100
//每个线性表都是一个struct类型的结点(声明为sqlist类型),这个struct类型结构如下:
struct sqlist{ // 也就是说,每个线性表都是sqlist类型,这个sqlist类型是用户自定义的结构类型,跟int一样可以用来说明变量
datatype data[maxsize]; // 线性表的内容存放在一个data数组当中
int n; // 线性表的长度用变量n来记录
};
//定位操作
int locate(sqlist *L,datatype x) {
int i;
i=1;
while(i<=L->n && L->data[i-1]!=x) i++;
if(i<=L->n) return i; //找到
else return 0; //未找到
}
//求集合交集
void intersection(sqlist *A,sqlist *B) {
int m,n,i,k,s=0;
datatype x;
for(i=0;i<A->n;i++) {
x=A->data[i]; //在A中取一元素
k=locate(B,x); //在B中查找它
if(k==0) s++; //k==0表示未在B中找到该元素
else if(s>0) A->data[i-s]=A->data[i];
}
A->n=A->n-s;
}
//输出顺序表
void print1(sqlist *L){
cout<<"The sqlist is: "<<endl;
for(int i=0;i<L->n;i++){
cout<<L->data[i]<<" ";
}
cout<<endl;
}
int main(){
sqlist *sq1=new sqlist; //为sq1开辟内存空间,如果缺少new,则sq1未被初始化!
sqlist *sq2=new sqlist;
int n1,n2,i,position;
cout<<"How many elements of the sqlist 1?"<<endl;
cin>>n1;
sq1->n=n1;
cout<<"Input the "<<n1<<" elements of the sqlist 1:"<<endl;
for(i=0;i<n1;i++){
cin>>sq1->data[i];
}
cout<<"How many elements of the sqlist 2?"<<endl;
cin>>n2;
sq2->n=n2;
cout<<"Input the "<<n2<<" elements of the sqlist 2:"<<endl;
for(i=0;i<n2;i++){
cin>>sq2->data[i];
}
intersection(sq1,sq2);
print1(sq1);
return 0;
}
如果有错误请大家指出,共同学习共同进步!更多百度百科