| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1073 人关注过本帖
标题:第一次敲线性表的代码 全是问题
只看楼主 加入收藏
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
重头来过吧


[fly]存在即是合理[/fly]
2013-11-13 22:16
Belin
Rank: 2
等 级:论坛游民
帖 子:5
专家分:18
注 册:2013-11-14
收藏
得分:2 
为什么好多东西没定义你就能用的?

一万年不改变。。。
2013-11-14 13:48
domoke
Rank: 2
等 级:论坛游民
帖 子:36
专家分:71
注 册:2013-9-11
收藏
得分:2 
i是宏定义  宏定义怎么能执行 ++ 呢? 宏的值是唯一的。
2013-11-14 13:59
又一轮明月
Rank: 2
等 级:论坛游民
帖 子:13
专家分:50
注 册:2013-10-31
收藏
得分:2 
你可以自己尝试改一下,这对你c语言能力有提高,其实,看起来许多,有时你改对一个,可能就少一半的错误提醒
2013-11-14 17:28
月祭樱冢
Rank: 2
等 级:论坛游民
帖 子:83
专家分:97
注 册:2013-7-15
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define MaxSize 50
typedef char ElemType;
typedef struct
{
    ElemType data[MaxSize];
       int length;
} SqList;
void createList(SqList *&L,int a[],int n)
{   int i;
    L=(SqList *)malloc(sizeof(SqList));
    for(i=0;i<n;i++)
        L->data[i]=a[i];
    L->length=n;
}
int LocateElem(SqList *L, ElemType e)    //按元素值查找
{
    int i=0;
    while (i<L->length && L->data[i]!=e)
        i++;                    //查找元素e
    if (i>=L->length)            //未找到时返回0
        return 0;
    else
        return i+1;                //找到后返回其逻辑序号
}
static bool ListDelete(SqList *&L,int i,int t)
{
    int j;
    if(i<1 || i>L->length)
        return false;
    for(j=i;j<L->length-t;j++)
        L->data[j]=L->data[j+t];
    L->length-=t;
    return true;
}
void DispList(SqList *L)    //输出线性表
{
    int i;
    for (i=0;i<L->length;i++)
        printf("%d ",L->data[i]);
    printf("\n");
}
int main()
{
    int i,m,n,x,y,l,a[MaxSize];
    SqList *L;
    bool b;
    printf("请输入顺序数组a:\n");
    for(i=0;i<MaxSize;i++)
    {
        scanf("%d",a[i]);
        if(a[i]=='\n')
            break;
    }
    printf("x=");
    scanf("%d",&x);
    printf("y=");
    scanf("%d",&y);
    l=sizeof(a)/sizeof(int);
    createList(L,a,l);
    n=LocateElem(L,x);
    m=LocateElem(L,y);
    m=m-n-1;
    b=ListDelete(L,n,m);
    if(b==true)
        DispList(L);
    else
        printf("删除失败!\n");
    return 0;
}
这是新代码  但是main函数中第一个for循环想要的功能在我的编译器上实现不了 (功能是希望输入回车时结束对数组的输入)不知道是不是程序的问题  

算法是程序的灵魂
2013-11-15 11:13
ckangle
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2013-11-11
收藏
得分:2 
  我也在敲 给你看看我的吧 严蔚敏书的
头文件define.h
程序代码:
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERLOW -2

typedef int Status;
源文件
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include "define.h"


/*线性表存储空间的初始化分配量*/
#define LIST_INIT_SIZE 100   

/*线性表存储空间的分配增量*/
#define LISTINCREMENT 10   


/*线性表结构体*/
typedef struct {
    int *elem;                                                    /*存储空间基址*/
    int length;                                                    /*当前长度*/
    int listsize;                                                /*当前分配的存储容量*/
}SqList;

/*初始化线性表or构造一个空表*/
Status InitList_Sq(SqList *L)
{
    L->elem = (int *)malloc(sizeof(int)*LIST_INIT_SIZE);
    if(!L->elem)
        exit(OVERLOW);                                            /*分配存储空间失败*/
    L->length = 0;                                                /*空表长度为0*/
    L->listsize = LIST_INIT_SIZE;                                /*初始存储容量*/
    return OK;
}

/*在顺序表L中第i个位置之前插入新的元素e*/
Status ListInsert_Sq(SqList *L, int pos, int e)
{
    int *newbase, *p, *q;
   

    /*判断i的位置,合法值1<=pos<=ListLength_Sq(L)+1*/
    if(pos<1 || pos>L->length+1) return ERROR;
    /*当前存储空间已满,增加分配*/
    if(L->length >= L->listsize)
    {
        newbase = (int *)realloc(L->elem,

        sizeof(int)*(L->listsize + LISTINCREMENT));
       

        if(!newbase) exit(OVERLOW);                                /*分配失败*/
        L->elem = newbase;                                        /*新基址*/
        L->listsize += LISTINCREMENT;                            /*增加存储容量*/
    }
    q = &(L->elem[pos - 1]);                                    /*q为插入位置*/
    for(p = &(L->elem[L->length - 1]); p >= q; --p)                /*插入位置及以后的元素后移*/
        *(p + 1) = *p;
    *q = e;                                                        /*插入元素*/
    ++L->length;                                                /*表长加1*/
    return OK;
}

/*创建线性表*/
void CreatList_Sq(SqList *L, int length)
{
    int elem;
    int i = 1;
   

    while(i <= length)
    {
        printf("Please input the %d number:",i);
        scanf("%d", &elem);
        ListInsert_Sq(L, i, elem);
        i++;
    }
}

/*打印线性表*/
void OutputList_Sq(SqList *L)
{
    int i = 0;
   

    if(L->length == 0)
        puts("This is a empty List.\n");
    while(i < L->length)
    {
        printf("%d ", L->elem[i++]);
    }
    printf("\n");
}

/*线性表删除操作*/
Status ListDelete_Sq(SqList *L, int pos, int *e)
{
    /*在顺序线性表L中删除第pos个元素,并用e返回该值*/
    int *p, *q;
   

    /*pos的合法位置为1<=pos<=ListLength_Sq(L))*/
    if(pos<1 || pos>L->length+1) return ERROR;                                /*i值不合法*/
    p = &L->elem[pos - 1];                                                    /*p为被删除元素的位置*/
    *e = *p;                                                                /*被删除元素的值赋给e*/
    q = L->elem + L->length-1;                                                /*表尾元素的位置*/
    for(++p; p<=q; ++p)

        *(p-1) = *p;                                                        /*被删除元素之后的元素左移*/
    --L->length;
    return OK;
}


int main()
{
    SqList *L;
    int e;
   

    if(InitList_Sq(L))
        printf("初始化成功\n");
    CreatList_Sq(L, 6);
    OutputList_Sq(L);
    ListDelete_Sq(L, 3, &e);
    printf("The Delete value is: %d\n", e);
    OutputList_Sq(L);
    return 0;
}

2013-11-15 12:53
beadrop
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2013-11-16
收藏
得分:2 
SqList这个结构体你没定义啊,
2013-11-16 11:28
快速回复:第一次敲线性表的代码 全是问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020704 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved