数据结构 线性表问题
#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呀 求解
[解决办法]
链表和数组都是线性表的具体形式。。。。
下面是我改好的你的程序:
#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;
}