darkguut 2021-03-16 09:22 采纳率: 33.3%
浏览 48
已采纳

刚学数据结构 有没有大佬看下为啥插入两次2

#include<iostream>
#include<stdlib.h>
using namespace std;
#define MAXSIZE 100
#define ERROR 0
#define OK 1

typedef int ElemType;

typedef struct 
{
    ElemType *elem;
    int length;
}SqList;
int InitList(SqList &L)
{
    L.elem = new ElemType[MAXSIZE];
    if(L.elem==NULL)
        return ERROR;
    L.length=0;
    return OK;
}
int CreateSqList(SqList &L,int n)
{
    int i;
    for(i=0;i<n;i++)
        cin>>L.elem[i];
    L.length=n;
    return OK;
}
int TraverseSqList(SqList L)
    {
    for(int i=0;i<L.length;i++)
        cout<<L.elem[i]<<" ";
    return 0;
}
int InsertList(SqList &L,int i,int e)
{
    if((i<1)||(i>L.length+1)) 
        return ERROR;
    if(L.length==MAXSIZE)
        return ERROR;
    for(int j=L.length-1;j>=i-1;j--)
        L.elem[j+1]=L.elem[j];
    L.elem[i-1]=e;
        ++L.length;
        return OK;
}


int main()

{
    int n,i,a,b,c;
    SqList L;
    if(InitList(L)==ERROR)
        exit(0);
    cout<<"Enter n:";
    cin>>n;
    CreateSqList(L,n);
    cout<<"ÇëÊäÈë²åÈë´ÎÊý:";
    cin>>c;
    for(int d=1;d<=c;d++)
    {
    cout<<"ÇëÊäÈë²åÈëλÖÃ:";
    cin>>a;
    cout<<"ÇëÊäÈë²åÈëÔªËØ:",
    cin>>b;
    InsertList(L,a,b);
    if(InsertList(L,a,b)==ERROR)cout<<"´íÎó"<<endl;
    else cout<<"³É¹¦"<<endl;
    }

    TraverseSqList(L);

}
  • 写回答

1条回答 默认 最新

  • cpp_learners 2021-03-16 10:28
    关注

    问题给你找到了,判断插入是否成功那条if语句哪里,你又进行了插入一次,所以才导致插入了两次。

    正确做法应该是,定义整形变量保存插入的返回值,然会使用该返回值进行判断插入是否成功!

    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    #define MAXSIZE 100
    #define ERROR 0
    #define OK 1
    
    typedef int ElemType;
    
    typedef struct {
    	ElemType *elem;
    	int length;
    }SqList;
    
    int InitList(SqList &L) {
    	L.elem = new ElemType[MAXSIZE];
    	if (L.elem == NULL)
    		return ERROR;
    	L.length = 0;
    	return OK;
    }
    
    int CreateSqList(SqList &L, int n) {
    	int i;
    	for (i = 0; i < n; i++)
    		cin >> L.elem[i];
    	L.length = n;
    	return OK;
    }
    
    int TraverseSqList(SqList L) {
    	for (int i = 0; i < L.length; i++)
    		cout << L.elem[i] << " ";
    	return 0;
    }
    
    int InsertList(SqList &L, int i, int e) {
    	if ((i < 1) || (i > L.length + 1))
    		return ERROR;
    	if (L.length == MAXSIZE)
    		return ERROR;
    	for (int j = L.length - 1; j >= i - 1; j--)
    		L.elem[j + 1] = L.elem[j];
    
    
    	L.elem[i - 1] = e;
    	++L.length;
    
    	return OK;
    }
    
    
    int main()
    
    {
    	int n, i, a, b, c;
    	SqList L;
    
    	if (InitList(L) == ERROR)
    		exit(0);
    
    	cout << "Enter n:";
    	cin >> n;
    
    	CreateSqList(L, n);
    
    	cout << "请输入插入次数::";
    	cin >> c;
    
    	for (int d = 1; d <= c; d++) {
    		cout << "请输入插入位置::";
    		cin >> a;
    		cout << "请输入插入元素:",
    		cin >> b;
    
    		int result = InsertList(L, a, b);	// 保存返回的结果
    
    
    		// if (InsertList(L, a, b) == ERROR)cout << "´失败" << endl;	// 这里又插入了一边
    		if (result == ERROR)cout << "´失败" << endl;
    		else cout << "成功" << endl;
    	}
    
    	TraverseSqList(L);
    
    	return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作