将顺序表里的数据存储位置倒置

 #include <stdio.h>
#include <stdlib.h>




struct SeqList
    {
        int MAXNUM;
        int n;
        int *element;
    };
    typedef struct SeqList *PSeqList;
PSeqList createNullList_seq(int m){
   PSeqList palist = (PSeqList)malloc(sizeof(struct SeqList));
   if(palist!=NULL)
    {
        palist->element=(int*)malloc(sizeof(int)*m);
        if(palist->element)
        {
            palist->MAXNUM=m;
            palist->n=0;
            return palist;
        }
        else free(palist);




    }
    printf("Out of space!!\n");
    return NULL;
}
int deleteP_seq(PSeqList palist,int p){
  int q;
  if(p<0||p>palist->n-1){
       printf("Not exist!\n");
       return 0;}
  for(q=p-1;q<palist->n-1;q++)
        palist->element[q]=palist->element[q+1];
  palist->n=palist->n-1;
  return 1;
}
int insertPre_seq(PSeqList palist,int p,int x){
    int q;
    if(palist->n>=palist->MAXNUM){
        printf("Overflow!\n");
        return 0;
    }
    if(p<0||p>palist->n){
        printf("Not exist!\n");return 0;
    }
    for(q=palist->n-1;q>=p-1;q--){
        palist->element[q+1]=palist->element[q];}
    palist->element[p]=x;
    palist->n=palist->n+1;
    return 1;
}
int main()
{
int m,i,p;
PSeqList palist;
printf("Please enter the double quantity of element that You hope the Sequence List has:\n");//输入你希望顺序表能存最大元素个数的双倍字数
scanf("%d",&m);
//调用函数createNullList_seq
palist=createNullList_seq(m);
for(i=0;i<m/2;i++)
{
palist->element[i]=i;
palist->n++;

for(i=0;i<m/2;i++)
{
printf("%d,",palist->element[i]);
}
printf("\n");
printf("After overturn:");
printf("\n");
//add the overturn data to m/2~m-1
for(i=m/2;i<m;i++)
{
palist->element[i]=palist->element[m-1-i];
palist->n++;
}
for(i=m/2;i<m;i++)
{
printf("%d,",palist->element[i]);
}
//.......
//use m/2~m-1 data to represent the 0~m/2-1 data
for(i=0;i<m/2;i++)
{
palist->element[i]=palist->element[m/2-i];
}
//delete m/2+1~m-1 data

}

//此程序中顺序表的值是自定义的,如果想自己输入数据,可以通过scanf函数实现,欢迎来信讨论;

//程序可能不够简洁化,欢迎大佬指点解答

好的,在C++中实现顺序表的删除操作,通常是指从数组表示的线性表中移除某个位置上的元素,并保持其余部分的连续性和完整性。下面是一个简单的示例代码以及对删除操作的基本原理说明: ```cpp #include <iostream> using namespace std; void deleteElement(int arr[], int &size, int index) { if (index < 0 || index >= size) { // 检查索引是否合法 cout << "Index out of bounds!" << endl; return; } for (int i = index; i < size - 1; ++i) { // 将后续元素向前移动一位 arr[i] = arr[i + 1]; } --size; // 更新顺序表大小 } void displayArray(const int arr[], int size) { for (int i = 0; i < size; ++i) cout << arr[i] << " "; cout << endl; } int main() { const int MAX_SIZE = 10; int arr[MAX_SIZE] = {1, 2, 3, 4, 5}; int size = 5; cout << "Before deletion:" << endl; displayArray(arr, size); int delIndex = 2; // 要删除的位置 deleteElement(arr, size, delIndex); cout << "After deleting element at index " << delIndex << ":" << endl; displayArray(arr, size); return 0; } ``` ### 删除操作的核心步骤: 1. **检查合法性**:首先验证用户指定的下标 `index` 是否在有效范围内 (`[0, size-1]`)。 2. **调整数据**:如果需要删除第 k 项,则将第 k+1 到最后的所有元素依次前移覆盖掉该位置的数据。 3. **更新长度**:由于减少了其中一个元素,所以整体列表的有效长度减一。 注意以上代码假定了输入的是静态分配的一维整型数组并维护了一个动态变量记录当前实际包含多少个有意义的值(即有效尺寸).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值