线性表的类型定义:线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的
顺序表的定义定义顺序表
typedef int datatype;
typedef struct {
int last;
Datatype date[maxsize];
}sequenlist;
1线性表的顺序表示和实现
1)顺序线性表的创建、打印和定位计数。
void creatlist(sequenlist* L) {
int i, n;
int tmp;
printf("请输入数据个数:n");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("date[%d]=", i);
scanf("%d", &tmp);
L->date[i] = tmp;
}
L->last = n - 1;
printf("n");
}
void printout(sequenlist* L) {
int i;
for (i = 0; i <= L->last; i++) {
printf("data[%d]=", i);
printf("%dn", L->date[i]);
}
}
int LocList(sequenlist* L,int i) {
if (L == NULL) {
printf("线性表为空");
return -1;
}
for (int j = 0; j <= L->last; j++) {
if (L->date[j] == i) {
printf("存在该数,该数在第%d个位置n", j+1);
}
}
return 0;
}
2)顺序线性表插入/删除。(A)指定插入删除位置;(B)插入删除后数据保持有序。
/
/指定位置插入并保持有序
void insert(sequenlist* L,int x,int i)
{
if (L == NULL && x > L->last) {
printf("插入失败请重试");
return;
}
int j;
for (int j = L->last; j >= i; j--) {
L->date[j + 1] = L->date[j];
}
L->date[i] = x;
L->last++;
//插入排序
int temp;
for (i = 1; i <= L->last; i++)
{
temp = L->date[i];
j = i - 1;
while (j >= 0 && temp < L->date[j]) //在这里改顺序 !!!
{
L->date[j+1] = L->date[j];
j--;
}
L->date[j + 1] = temp;
}
}
//指定位置删除并保持有序
void DeletList(sequenlist* L, int i) {
if (L == NULL && i > L->last) {
printf("删除失败请重试");
return;
}
for (int j =i; j <=L->last; j++) {
L->date[j ] = L->date[j+1];
}
L->last--;
//插入排序
int j;
int temp;
for (i = 1; i <= L->last; i++)
{
temp = L->date[i];
j = i - 1;
while (j >= 0 && temp < L->date[j]) //在这里改顺序 !!!
{
L->date[j + 1] = L->date[j];
j--;
}
L->date[j + 1] = temp;
}
}
3)顺序线性表就地逆序。
//顺序表就地逆序
void ReverList(sequenlist* L) {
if (L == NULL) {
return;
}
int left = 0;//左
int right = L->last;//右
while (left <= right) {
//交换
if (L->date[left] != L->date[right]) {
L->date[left] = L->date[left] ^ L->date[right];
L->date[right] = L->date[left] ^ L->date[right];
L->date[left] = L->date[left] ^ L->date[right];
}
left++;
right--;
}
}
4)判断两顺序表是否相同
//判断两线性表是否相同
void JudgeSameList(sequenlist* L1, sequenlist* L2) {
if ( L2 == NULL && L1 == NULL) {
printf("线性表为空请重试");
return;
}
else if (L1->last == L2->last) {
int i = 0;
while (i <= L1->last) {
if (L1->date[i] != L2->date[i]) {
printf("两线性表不相同");
return;
}
i++;
}
printf("两线性表相同");
return;
}
printf("两线性表不相同");
}
5}合并两个顺序表并对数据进行排序
void MergeList(sequenlist* L1, sequenlist* L2) {
if (L1 == NULL&&L2!=NULL) {
printf("合并失败");
return ;
}
else if (L2 == NULL && L1 != NULL) {
printf("合并失败");
return ;
}
int j = 0;
while (j <= L2->last) {
L1->date[L1->last+++1] = L2->date[j++];
}
//插入排序
int temp;
int i;
for (i = 1; i <= L1->last; i++)
{
temp = L1->date[i];
j = i - 1;
while (j >= 0 && temp < L1->date[j]) //在这里改顺序 !!!
{
L1->date[j + 1] = L1->date[j];
j--;
}
L1->date[j + 1] = temp;
}
}
写博客的第一天记录自己的学习(慢慢更新)



