首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求前辈指教数据结构线性表顺序结构的有关问题

2013-08-04 
求前辈指教数据结构线性表顺序结构的问题这个是我参考一些书后自己写的线性表顺序结构,但是在运行的时候是

求前辈指教数据结构线性表顺序结构的问题
这个是我参考一些书后自己写的线性表顺序结构,但是在运行的时候是死循环,找了半天没找出来原因,求前辈们指教。。。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h >
#define OK 1
#define ERROR 0
#define MAXSIZE 20
#define INCREMENT 10
typedef int datatype;
typedef struct
{
    datatype *data;
    int length;
    int listsize;
}sqlist;

int Initlist(sqlist *L)
{
    L->data=(datatype*)malloc(MAXSIZE*sizeof(datatype));
    if(!L->data) return ERROR;
    L->length=0;
    L->listsize=MAXSIZE;
    return OK;
}
int insertlist(sqlist *L,int i,datatype e)
{
    datatype *newbase;
    int k;
    if(i<1||i>L->length) return ERROR;
    if(L->length>=L->listsize)
        {
           newbase=(datatype*)realloc(L->data,(L->listsize+INCREMENT)*(sizeof(datatype)));
           L->data=newbase;
           L->listsize+=INCREMENT;
        }
    for(k=L->length-1;k>=i-1;k--)
        L->data[k+1]=L->data[k];
    L->data[i-1]=e;
    L->length++;
    return OK;
}

int deletelist(sqlist *L,int i,datatype *e)
{
    int k;
    if(i<1||i>L->length) return ERROR;
    *e=L->data[i-1];
    for(k=i;k<=L->length-1;k++)
        L->data[k-1]=L->data[k];
    L->length--;
    return OK;
}

int locate(sqlist L,datatype x)
{
    datatype *p;
    int i=1;
    p=L.data;
    while(p||i<=L.length)
    {
        if(*p!=x)
           {
            ++i;
            ++p;


           }
        else
            return i;
    }
    return 0;
}
int countlist(sqlist L)
{
    datatype *p;
    int i=1;
    p=L.data;
    while(p)
    {
        ++p;
        ++i;
    }
    return i;
}


void create(sqlist *L,int m)
{
    int i;
    datatype e;
    printf("\n\t依次输入元素:");
    for(i=1;i<=m;i++)
    {
        scanf("%d",&e);
        insertlist(L,i,e);
    }
}

void printlist(sqlist L)
{
    int i,m;
    for(i=1;i<=m;i++)
        printf("%d",L.data[i-1]);
}


void listoperate(sqlist L)
{
    int i,e,x;
int choose;
while(1)
{
printf("\n\n");
printlist(L);
printf("\n\t|**********线性表操作界面***********|");
printf("\n\t|*1.插入 2.删除 3.查找 4.元素个数 0.退出*|");
printf("\n\t|*-->请输入你的选择:  ");
scanf("%d", &choose);
switch(choose)
{
    case 1:
          {
                   printf("请输入插入元素位置和元素数值:");
           scanf("%d %d",&i,&e);
           if(insertlist(&L,i,e))
                       printlist(L);
                   else
                       printf("输入错误!");
                   break;
          }
            case 2:


                   {
                    printf("请输入想要删除元素的位置:");
                    scanf("%d",&i);
                    if(deletelist(&L,i,&e))
                       printlist(L);
                    else
                       printf("输入错误!");
                    break;
                   }
            case 3:
                   {
                    printf("请输入想要查找的元素的数值:");
                    scanf("%d",&x);
                    if(locate(L,x))
                    {
                       i=locate(L,x);
                       printf("%d",i);
                    }
                    break;
                   }
            case 4:
                  {
                    printf("顺序表的元素个数为:");


                    i=countlist(L);
                    printf("%d",i);
                    break;
                  }
            case 0:
                  {
                      exit(OK);
                      break;
                  }
            default:
       printf("\t输入指令错误,请按规则输入\n\n");
       break;
}
}
}

int main(int argc, char ** argv)
{
    sqlist L;
    int m;
    if(Initlist(&L))
    {
        printf("\n\t线性表表初始化成功,继续创建线性表\n");
printf("\n\t请输入元素个数( m ): ");
scanf("%d",&m);
create(&L, m);
    }
    printf("\n\t");
    printf("\t线性表创建成功,按任意键进入操作界面");
getch();
system("cls");
listoperate(L);

return OK;
}
数据结构
[解决办法]
1. 
 int i,m;
    for(i=1;i<=m;i++)

是用未初始化的变量.

2. while(p
[解决办法]
i<=L.length)
是不是该用 && ?

热点排行