顺序表1

一天一小步,不能颓了

#include
#include
#define MAXSIZE 1000

typedef struct {
 int data[MAXSIZE];
 int last;//记录当前线性表中最后一个元素在数组中的位置,表长last+1
}Seqlist;

//顺序表初始化
Seqlist *init_Seqlist()
{
 Seqlist *L=malloc(sizeof(Seqlist));
 L->last=-1;
 return L;
}
//顺序表的打印
void print(Seqlist *L)
{
 int i;
 if(L->last==-1)
  printf("NULL");
 else
 for(i=0;i<=L->last;i++)
  printf("第%d个元素为:%d\n",i+1,L->data[i]);
}

//顺序表的长度
int length_Seqlist(Seqlist *L)
{
 return L->last+1;
}

//返回线性表L中第i个元素的值
int Get_Seqlist(Seqlist *L,int i)
{
 if(i>=0&&i<=length_Seqlist(L))
  return L->data[i];
}
//按值查找,返回存储位置
//查找值为x的在链表中的位置
int Location_(Seqlist *L,int x)
{
 int i=0;
 while(i<=L->last&&L->data[i]!=x)
  i++;
 if(i>L->last)
  return -1;
 else return -i;
}


//顺序表的插入
void Insert_Seqlist(Seqlist *L,int i,int x)
{
 int j;
 if(L->last==MAXSIZE-1)
 printf("表满!\n");}
 if(i<1||i>L->last+2)
 printf("位置错!");}
 for(j=L->last;j>i-1;j--)
 {
  L->data[j+1]=L->data[j];
 }
 L->data[i-1]=x;
 L->last++;

}
//顺序表的删除
void Delete_Seqlist(Seqlist *L,int i)
{
 int j;
 if(i<1||i>L->last-1)
 printf("不存在第%d个元素",i);}
 for(j=i;j<=L->last-1;j++)
 L->data[j]=L->data[j+1];}
 L->last--;
}
//顺序表从小到大排列
void sort(Seqlist *L)
{
 int i,j;
 int x,y;
 x=L->data[0];
 for(i=1;i<=L->last;i++)
  if(L->data[i]
  {
   y=L->data[i];
   for(j=i-1;j>=0;j--)
   {
    L->data[j+1]=L->data[j];
   }
   L->data[0]=y;
  }
}

//有序表的合并算法
void merge(Seqlist *A,Seqlist *B,Seqlist *C)
{
 int i,j,k;
 i=0,j=0,k=0;
 while(i<=A->last&&j<=B->last)
 {if(A->data[i]data[j])
   C->data[k++]=A->data[i++];
  else
   C->data[k++]=B->data[j++];
 }
 while(i<=A->last)
  C->data[k++]=A->data[i++];
 while(i<=B->last)
  C->data[k++]=B->data[j++];
 C->last=k-1;
}

main()
{
 Seqlist *L;
 L=init_Seqlist();
 Insert_Seqlist(L,1,250);
 Insert_Seqlist(L,2,111);
 print(L);
 return 0;
}

首先,我们需要创建两个`std::vector`类型的顺序表(也叫动态数组),然后分别从键盘读取输入数据并填充它们。接着,我们将顺序表2的数据逆序,再将其逐个添加到顺序表1的末尾。最后,我们遍历顺序表1并输出结果。 以下是一个简单的C++代码示例: ```cpp #include <iostream> #include <vector> // 假设这是一个顺序表的节点类型 struct Node { int data; Node* next; }; // 功能:生成顺序表,从键盘输入 void createSequentialList(std::vector<Node*>& list, bool reverseInput) { Node* newNode = new Node(); int input; std::cout << "Enter elements for the list: "; while (std::cin >> input) { newNode->data = reverseInput ? input : -input; // 如果reverseInput为真,输入的值取反 newNode->next = list.empty() ? nullptr : list.back(); // 将新元素添加到列表尾部 list.push_back(newNode); } } int main() { std::vector<Node*> seqList1, seqList2; // 生成顺序表1 createSequentialList(seqList1, false); // 生成顺序表2 std::cout << "\nEnter elements for the reversed list: "; createSequentialList(seqList2, true); // 输入逆序 // 逆序顺序表2 for (auto it = seqList2.begin(); it != seqList2.end(); ++it) { Node* temp = *it; *it = *--seqList2.end(); *seqList2.end() = temp; } // 合并顺序表2到顺序表1 seqList1.insert(seqList1.end(), seqList2.begin(), seqList2.end()); // 遍历并输出顺序表1 std::cout << "Merged list: "; for (const auto& node : seqList1) { std::cout << node->data << " "; } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值