c++ 顺序表及其相关操作
《仅供自己学习参考》
顺序表,线性表的顺序存储结构。
- 以数组空间的形式存储
- 数据元素逻辑上相邻,物理位置也相邻
- 以一组连续的存储单元依次存储数据元素
前提:
#include<iostream>
#include<stdlib.h>
#define LIST_SIZE 100
#define SIZE 10
#define OK 1
#define ERROR 0
using namespace std;
typedef int Status;
struct List
{int *elem;//线性表(顺序表)在这里分配的是数组空间,L.elem是地址,L.elem[i]是数组对应的值int length;//当前长度int listsize;//当前分配的存储容量
};
顺便在主函数中实现合并操作
- 已知线性表La,Lb,求A=A并B
- 在这里,我们可以将问题看作是,扩大线性表La,添加进去在Lb中存在,且La中不存在的元素
- 创建空表
Status InitList(List &L)//构造一个空线性表L
{L.elem=(int *)malloc(LIST_SIZE * sizeof(int));if(!L.elem)exit(ERROR);L.length=0;L.listsize=LIST_SIZE;return OK;
}
- 插入操作
Status ListInsert(List &L,int i,int e)//在位置i之前添加e
{if(i<1||i>L.length+1) return ERROR;if(L.length>=L.listsize){int *newbase=(int *)realloc(L.elem,(L.listsize+SIZE)*sizeof(int));if(!newbase) exit(ERROR);L.elem=newbase;L.listsize+=SIZE;}int* q=&(L.elem[i-1]);for(int *p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;*q=e;++L.length;return OK;
}
- 删除操作
Status ListDelete(List &L,int i, int *e)//删除第i位元素,并用e返回其值
{if(i<1||i>L.length+1) return ERROR;int *p=&(L.elem[i-1]);e=p;int *q=L.elem+L.length-1;for(++p;p<=q;p++)*(p-1)=*p;--L.length;return OK;
}
- 显示元素
void ListShow(List L)
{for(int i=0;i<L.length;i++)cout<<L.elem[i];cout<<endl;
}
- 主函数
int main()
{int ii=1;List l1,l2;InitList(l1);InitList(l2);ListInsert(l1,1,1);ListInsert(l1,2,3);ListInsert(l1,3,4);ListInsert(l2,1,2);ListInsert(l2,2,3);ListInsert(l2,3,5);ListShow(l1);ListShow(l2);for(int i=0;i<l2.length;i++)//==合并操作=={for(int j=0;j<l1.length;j++){if(l1.elem[j]==l2.elem[i])ii*=0;}if(ii==1)ListInsert(l1,l1.length+1,l2.elem[i]);ii=1;}ListShow(l1);return 0;
}
- 运行结果
完
发布评论