回 帖 发 新 帖 刷新版面

主题:一个关于在顺序表里删除问题的问题

// sqlist_del_x_to_y.cpp : Defines the entry point for the console application.
//程序功能:有一个顺序表,将里面为x到y之间的字符删掉
//程序没有语法错误,但是仍然存在问题,帮我看看,谢哦![em2][em2][em2]

#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#define MaxLen 50

typedef struct{
    char *data;
    int len;
}Sqlist;

void InitSqlist(Sqlist &L)
{       //对顺序表进行初始化
    L.len=0;
}
int InsSqlist(Sqlist &L,int i,char ch)
{       //在表里插入元素
    int k;
    L.data=(char *)malloc(sizeof(char));
    if(i<0||i>L.len)return -1;
    for(k=L.len;k>=i;k--) L.data[k]=L.data[k-1];
    L.data[i-1]=ch;
    return 1;
}


void main(Sqlist &A,char x,char y)
{
    int i=0,k=0,t,j;
    InitSqlist(*&A);
    for(j=0;j<20;j++)InsSqlist(*&A,j,j*2);
    printf("输入x,y:\nx=");
    scanf("%c",&x);
    printf("y=");
    scanf("%c\n",&y);
    while(i<A.len)
    {
        if(A.data[i]>x&&A.data[i]<y)
            A.data[i-k]=A.data[i];
        else
            k++;
        i++;
    }
    A.len=A.len-k;
    printf("顺序表为:\n");
    for(t=0;t<A.len;t++)
        printf("%c",A.data[t]);
    printf("\n长度为%d\n",A.len);
}



回复列表 (共4个回复)

沙发

没怎么仔细看。
不过,InitSqlist(*&A);
和InsSqlist(*&A,j,j*2);
里面的*&A,是什么目的呢?

一般在函数定义里面会这么用,目的相当于地址的地址,为了在函数里面创建数据结构。
但是在使用的时候这样用,有什么意义呢?

板凳

谢谢大哥指点,我再看看,哈哈






[fly]Email:cexodddf@163.com[/fly]

3 楼

把InitSqlist(*&A)和InsSqlist里的*&去掉了,这个没什么影响,不过问题还不在这里哦,哪位帮我看看,小弟先谢啦

4 楼

main函数中有两个问题:
1。1楼已经说了
2。    while(i<A.len)//这段删除算法是错的。自己修改一下
    {
        if(A.data[i]>x&&A.data[i]<y)
            A.data[i-k]=A.data[i];
        else
            k++;
        i++;

我来回复

您尚未登录,请登录后再回复。点此登录或注册