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

数据结构 线性表有关问题

2013-01-11 
数据结构线性表问题#includestdio.h#includestdlib.h#defineLISTSIZE100#defineINCREAMENT10typedef s

数据结构 线性表问题
#include<stdio.h>
#include<stdlib.h>
#define   LISTSIZE   100
#define   INCREAMENT  10

typedef struct {
int *elem;
int length;
int listsize;
}List;

void Init_list(List &L)
{
L.elem =(int *)malloc (LISTSIZE * sizeof(int)) ;
if (!L.elem)
return ;
L.length = 0;
L.listsize = LISTSIZE;
}

void Insert_list(List &L, int i, int e)
{
int *p = NULL, *q = NULL, *newbase = NULL;
if (i < 1 || i > L.length + 1)
return ;
if (L.length >= L.listsize)
{
newbase = (int *) realloc (L.elem, (INCREAMENT+ L.listsize) * sizeof (int));
if (!newbase)
return;
L.elem = newbase;
L.listsize += INCREAMENT;
}
q = &(L.elem[i - 1]);
for (p = &(L.elem[L.length - 1]); p >= q; --p)
*(p + 1) = *p;
*q = e;
++L.length;
*p = NULL;
*q = NULL;
*newbase = NULL;
}

void Display_list(List L)
{
int *p = NULL;
for (p = L.elem; p <= (L.elem + L.length - 1); ++p)
{
printf("%d", *p);
}
printf("\n");
}
 
int main()
{
List l1;
Init_list(l1);
Insert_list(l1, 1, 6);
Display_list(l1);
return 0;
}
这个程序怎么没有输出6呀  求解
[解决办法]

引用:
引用:typedef struct {
 int *elem;
 int length;
 int listsize;
 }List;
 

如果上面是你写的链表结点的话,应改之为:
typedef struct Name{
 struct Name *elem;
 int length;
 int listsi……



链表和数组都是线性表的具体形式。。。。

下面是我改好的你的程序:

 #include<stdio.h>//以后请规范贴代码。免得浪费许多不必要的时间。
 #include<stdlib.h>
 #define   LISTSIZE   100
 #define   INCREAMENT  10

typedef struct {
    int *elem;
    int length;
    int listsize;
}List;

void Init_list(List &L){
    L.elem =(int *)malloc (LISTSIZE * sizeof(int)) ;
    if (!L.elem) return ;
    L.length = 0;
    L.listsize = LISTSIZE;
    //printf("%d\n",L.elem);
}

void Insert_list(List &L, int i, int e){
    int *p = NULL, *q = NULL, *newbase = NULL;
    if (i < 1 
[解决办法]
 i > L.length + 1) return ;
    if(L.length >= L.listsize){
        newbase = (int *) realloc (L.elem, (INCREAMENT+ L.listsize) * sizeof (int));


        if (!newbase)return;
        L.elem = newbase;
        L.listsize += INCREAMENT;
    }
    q = &(L.elem[i - 1]);
    for (p = &(L.elem[L.length-1]); p >= q; --p)
        *(p + 1) = *p;
    *q = e;
    ++L.length;
    p = NULL;//这里你粗心了!
    q = NULL;
    newbase = NULL;
}

void Display_list(List L){
    int *p = NULL;
    for(p = L.elem; p <= (L.elem + L.length - 1); ++p)
        printf("%d", *p);
    printf("\n");
}

int main(){
    List l1;
    Init_list(l1);
    Insert_list(l1, 1, 6);
    Display_list(l1);
    free(l1.elem);//记得释放申请的内存!
    return 0;
}

热点排行