#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//初始化顺序表
Sqlist *Initlist(Sqlist *L)
{
L=(Sqlist *)malloc(sizeof(Sqlist));
L->len=0;
return L;
}
//释放顺序表
void Freelist(Sqlist *L)
{
free(L);
}
//判断顺序表L是否为空表
int Listempty(Sqlist *L)
{
return(L->len==0);
}
//返回顺序表L的元素个数
int Listlength(Sqlist *L)
{
return(L->len);
}
//输出顺序表L
void Displist(Sqlist *L)
{
int i;
if(Listempty(L)) return;
for(i=0;i<L->len;i++)
printf("%c",L->date[i]);
printf("\n");
}
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
e=L->date+(i-1);
return 1;
}
//在顺序表中查找元素e
int Locateelem(Sqlist *L,elemtype e)
{
int i=0;
while(i<L->len&&L->date[i]!=e)
i++;
if(i>=L->len)
return 0;
else
return i+1;
}
//在顺序表L中第i个位置上插入元素e
int Listinsert(Sqlist *L, int i, elemtype e)
{
int j;
if(i<1||i>L->len+1)
return 0;
for(j=L->len-1;j>=i-1;j--)
L->date[j+1]=L->date[j];
L->date[i-1]=e;
L->len++;
return 1;
}
//在顺序表L中删除第i个元素
int Listdelete(Sqlist *L,int i)
{
int j;
if(i<1||i>L->len)
return 0;
for(j=i-1;j<L->len-1;j++)
L->date[j]=L->date[j+1];
L->len--;
return 1;
}
//主函数
void main()
{
Sqlist *L=NULL;
elemtype *e=NULL;
printf("(1)初始化顺序表L\n");
L=Initlist(L);
printf("(2)依次采用尾插入法插入a,b,c,d,e元素\n");
Listinsert(L,1,'a');
Listinsert(L,2,'b');
Listinsert(L,3,'c');
Listinsert(L,4,'d');
Listinsert(L,5,'e');
printf("(3)输出顺序表L:");
Displist(L);
printf("(4)顺序表L长度=%d\n",Listlength(L));
printf("(5)顺序表L为%s\n",(Listempty(L)?"空":"非空"));
Getelem(L,3,e);
printf("(6)顺序表L的第3个元素=%c\n",e);
printf("(7)元素a的位置=%d\n",Locateelem(L,'a'));
printf("(8)在第4个元素位置上插入f元素\n");
Listinsert(L,4,'f');
printf("(9)输出顺序表L:");
Displist(L);
printf("(10)删除L的第3个元素\n");
Listdelete(L,3);
printf("(11)输出顺序表L:");
Displist(L);
printf("(12)释放顺序表L\n");
Freelist(L);
}
运行结果:
(1)初始化顺序表L
(2)依次采用尾插入法插入a,b,c,d,e元素
(3)输出顺序表L:abcde
(4)顺序表L长度=5
(5)顺序表L为非空
(6)顺序表L的第3个元素=
(7)元素a的位置=1
(8)在第4个元素位置上插入f元素
(9)输出顺序表L:abcfde
(10)删除L的第3个元素
(11)输出顺序表L:abfde
(12)释放顺序表L
为什么第六步结果出不来????
请求各位高手指点下!!!
谢谢咯!!!!
15 个解决方案
#1
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
e=L->date+(i-1);
return 1; //这里是return e吧
}
#2
调用的通过指针传回去的,elemtype *e 不是通过return返回的。就是return 1。
#3
修改方法
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e= *(L->date+(i-1));
//e = &L->date[i-1];
return 1;
}
main中:
e = (char *)malloc(sizeof(char));
Getelem(L,3,e);
printf("(6)the third elem=%c\n", *e);
分配一个存储空间存放
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e= *(L->date+(i-1));
//e = &L->date[i-1];
return 1;
}
main中:
e = (char *)malloc(sizeof(char));
Getelem(L,3,e);
printf("(6)the third elem=%c\n", *e);
分配一个存储空间存放
#4
or:
elemtype e;
Getelem(L,3,&e);
printf("(6)the third elem=%c\n", e);
elemtype e;
Getelem(L,3,&e);
printf("(6)the third elem=%c\n", e);
#5
谢谢楼上高手指点!!!
但是其中有一处不行
就是在:
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
e = &L->date[i-1];
return 1;
}
这样子运行时结果还是一样,没办法出来!!
只有:
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e= *(L->date+(i-1));
return 1;
}
这样子才可以。。
而对于主函数中的调用,两种方法都行!!
但是其中有一处不行
就是在:
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
e = &L->date[i-1];
return 1;
}
这样子运行时结果还是一样,没办法出来!!
只有:
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e= *(L->date+(i-1));
return 1;
}
这样子才可以。。
而对于主函数中的调用,两种方法都行!!
#6
还有一点问题就是,上面的那个程序是我从下面的这个程序改过来的。而下面的这个程序中有个问题看不懂。
麻烦下高手再帮忙看下!!
//文件名:algo2-1.cpp
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist; //顺序表类型定义
//初始化顺序表
Sqlist *Initlist(Sqlist *L)
{
L=(Sqlist *)malloc(sizeof(Sqlist));
L->len=0;
return L;
}
//释放顺序表
void Freelist(Sqlist *L)
{
free(L);
}
//判断顺序表L是否为空表
int Listempty(Sqlist *L)
{
return(L->len==0);
}
//返回顺序表L的元素个数
int Listlength(Sqlist *L)
{
return(L->len);
}
//输出顺序表L
void Displist(Sqlist *L)
{
int i;
if(Listempty(L)) return;
for(i=0;i<L->len;i++)
printf("%c",L->date[i]);
printf("\n");
}
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e=*(L->date+(i-1));
return 1;
}
//在顺序表中查找元素e
int Locateelem(Sqlist *L,elemtype e)
{
int i=0;
while(i<L->len&&L->date[i]!=e)
i++;
if(i>=L->len)
return 0;
else
return i+1;
}
//在顺序表L中第i个位置上插入元素e
int Listinsert(Sqlist *L, int i, elemtype e)
{
int j;
if(i<1||i>L->len+1)
return 0;
for(j=L->len-1;j>=i-1;j--)
L->date[j+1]=L->date[j];
L->date[i-1]=e;
L->len++;
return 1;
}
//在顺序表L中删除第i个元素
int Listdelete(Sqlist *L,int i)
{
int j;
if(i<1||i>L->len)
return 0;
for(j=i-1;j<L->len-1;j++)
L->date[j]=L->date[j+1];
L->len--;
return 1;
}
//文件名:exp2-1.cpp
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//调用外部函数
extern Sqlist *Initlist(Sqlist *L);
extern void Freelist(Sqlist *L);
extern int Listempty(Sqlist *L);
extern int Listlength(Sqlist *L);
extern void Displist(Sqlist *L);
extern int Getelem(Sqlist *L,int i,elemtype *e);
extern int Locateelem(Sqlist *L, elemtype e);
extern int Listinsert(Sqlist *L, int i, elemtype e);
extern int Listdelete(Sqlist *L,int i);
//主函数
void main()
{
Sqlist *L;
elemtype e;
printf("(1)初始化顺序表L\n");
L=Initlist(L);
printf("(2)依次采用尾插入法插入a,b,c,d,e元素\n");
Listinsert(L,1,'a');
Listinsert(L,2,'b');
Listinsert(L,3,'c');
Listinsert(L,4,'d');
Listinsert(L,5,'e');
printf("(3)输出顺序表L:");
Displist(L);
printf("(4)顺序表L长度=%d\n",Listlength(L));
printf("(5)顺序表L为%s\n",(Listempty(L)?"空":"非空"));
Getelem(L,3,&e);
printf("(6)顺序表L的第3个元素=%c\n",e);
printf("(7)元素a的位置=%d\n",Locateelem(L,'a'));
printf("(8)在第4个元素位置上插入f元素\n");
Listinsert(L,4,'f');
printf("(9)输出顺序表L:");
Displist(L);
printf("(10)删除L的第3个元素\n");
Listdelete(L,3);
printf("(11)输出顺序表L:");
Displist(L);
printf("(12)释放顺序表L\n");
Freelist(L);
}
其中下面程序中的 }Sqlist; 中出错!!
错误提示是:error C2371:'Sqlist' : redefinition: different basic types
//文件名:exp2-1.cpp
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//调用外部函数
麻烦下高手再帮忙看下!!
//文件名:algo2-1.cpp
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist; //顺序表类型定义
//初始化顺序表
Sqlist *Initlist(Sqlist *L)
{
L=(Sqlist *)malloc(sizeof(Sqlist));
L->len=0;
return L;
}
//释放顺序表
void Freelist(Sqlist *L)
{
free(L);
}
//判断顺序表L是否为空表
int Listempty(Sqlist *L)
{
return(L->len==0);
}
//返回顺序表L的元素个数
int Listlength(Sqlist *L)
{
return(L->len);
}
//输出顺序表L
void Displist(Sqlist *L)
{
int i;
if(Listempty(L)) return;
for(i=0;i<L->len;i++)
printf("%c",L->date[i]);
printf("\n");
}
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e=*(L->date+(i-1));
return 1;
}
//在顺序表中查找元素e
int Locateelem(Sqlist *L,elemtype e)
{
int i=0;
while(i<L->len&&L->date[i]!=e)
i++;
if(i>=L->len)
return 0;
else
return i+1;
}
//在顺序表L中第i个位置上插入元素e
int Listinsert(Sqlist *L, int i, elemtype e)
{
int j;
if(i<1||i>L->len+1)
return 0;
for(j=L->len-1;j>=i-1;j--)
L->date[j+1]=L->date[j];
L->date[i-1]=e;
L->len++;
return 1;
}
//在顺序表L中删除第i个元素
int Listdelete(Sqlist *L,int i)
{
int j;
if(i<1||i>L->len)
return 0;
for(j=i-1;j<L->len-1;j++)
L->date[j]=L->date[j+1];
L->len--;
return 1;
}
//文件名:exp2-1.cpp
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//调用外部函数
extern Sqlist *Initlist(Sqlist *L);
extern void Freelist(Sqlist *L);
extern int Listempty(Sqlist *L);
extern int Listlength(Sqlist *L);
extern void Displist(Sqlist *L);
extern int Getelem(Sqlist *L,int i,elemtype *e);
extern int Locateelem(Sqlist *L, elemtype e);
extern int Listinsert(Sqlist *L, int i, elemtype e);
extern int Listdelete(Sqlist *L,int i);
//主函数
void main()
{
Sqlist *L;
elemtype e;
printf("(1)初始化顺序表L\n");
L=Initlist(L);
printf("(2)依次采用尾插入法插入a,b,c,d,e元素\n");
Listinsert(L,1,'a');
Listinsert(L,2,'b');
Listinsert(L,3,'c');
Listinsert(L,4,'d');
Listinsert(L,5,'e');
printf("(3)输出顺序表L:");
Displist(L);
printf("(4)顺序表L长度=%d\n",Listlength(L));
printf("(5)顺序表L为%s\n",(Listempty(L)?"空":"非空"));
Getelem(L,3,&e);
printf("(6)顺序表L的第3个元素=%c\n",e);
printf("(7)元素a的位置=%d\n",Locateelem(L,'a'));
printf("(8)在第4个元素位置上插入f元素\n");
Listinsert(L,4,'f');
printf("(9)输出顺序表L:");
Displist(L);
printf("(10)删除L的第3个元素\n");
Listdelete(L,3);
printf("(11)输出顺序表L:");
Displist(L);
printf("(12)释放顺序表L\n");
Freelist(L);
}
其中下面程序中的 }Sqlist; 中出错!!
错误提示是:error C2371:'Sqlist' : redefinition: different basic types
//文件名:exp2-1.cpp
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//调用外部函数
#7
改成这样看看
int Getelem(Sqlist *L,int i,elemtype *&e)
{
if(i<1||i>L->len)
return 0;
e=L->date+(i-1);
return 1;
}
int Getelem(Sqlist *L,int i,elemtype *&e)
{
if(i<1||i>L->len)
return 0;
e=L->date+(i-1);
return 1;
}
#8
不行。
错误提示:
missing ')' before '&'
missing '{' before '&'
错误提示:
missing ')' before '&'
missing '{' before '&'
#9
楼主从来不结贴啦!!!
#10
问题还没解决,怎么结啊??!!
#11
这是我的第一帖啊!!呵呵……
#12
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e = L->date[i-1];
//e=L->date+(i-1);
return 1;
}
函数中e本来要做传出参数,但是,函数中e=L->date+(i-1),是把e指针指向另外的地址,等于丢掉了原来的地址
就无法做传出参数了
函数中应该是给*e赋值才对
另外,建议调用函数时如下使用
char e = '0';
Getelem(L,3,&e);
{
if(i<1||i>L->len)
return 0;
*e = L->date[i-1];
//e=L->date+(i-1);
return 1;
}
函数中e本来要做传出参数,但是,函数中e=L->date+(i-1),是把e指针指向另外的地址,等于丢掉了原来的地址
就无法做传出参数了
函数中应该是给*e赋值才对
另外,建议调用函数时如下使用
char e = '0';
Getelem(L,3,&e);
#13
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//初始化顺序表
Sqlist *Initlist(Sqlist *L)
{
L=(Sqlist *)malloc(sizeof(Sqlist));
L->len=0;
return L;
}
//释放顺序表
void Freelist(Sqlist *L)
{
free(L);
}
//判断顺序表L是否为空表
int Listempty(Sqlist *L)
{
return(L->len==0);
}
//返回顺序表L的元素个数
int Listlength(Sqlist *L)
{
return(L->len);
}
//输出顺序表L
void Displist(Sqlist *L)
{
int i;
if(Listempty(L))
return;
for(i=0;i<L->len;i++)
printf("%c",L->date[i]);
printf("\n");
}
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype **e)
{
if(i<1||i>L->len)
return 0;
*e= (L->date+(i-1));
//e = &L->date[i-1];
return 1;
}
//在顺序表中查找元素e
int Locateelem(Sqlist *L,elemtype e)
{
int i=0;
while(i<L->len&&L->date[i]!=e)
i++;
if(i>=L->len)
return 0;
else
return i+1;
}
//在顺序表L中第i个位置上插入元素e
int Listinsert(Sqlist *L, int i, elemtype e)
{
int j;
if(i<1||i>L->len+1)
return 0;
for(j=L->len-1;j>=i-1;j--)
L->date[j+1]=L->date[j];
L->date[i-1]=e;
L->len++;
return 1;
}
//在顺序表L中删除第i个元素
int Listdelete(Sqlist *L,int i)
{
int j;
if(i<1||i>L->len)
return 0;
for(j=i-1;j<L->len-1;j++)
L->date[j]=L->date[j+1];
L->len--;
return 1;
}
//主函数
int main()
{
Sqlist *L=NULL;
elemtype *e=NULL;
printf("(1)ini L\n");
L=Initlist(L);
Getelem(L,3, &e);
printf("(6)the third elem=%c\n", *e);
printf("(7)a=%d\n",Locateelem(L,'a'));
printf("(8)input f in the 4 th\n");
Listinsert(L,4,'f');
printf("(9)output L:");
Displist(L);
printf("(10)delete the 3rd elem\n");
Listdelete(L,3);
printf("(11)output L:");
Displist(L);
printf("(12)free L\n");
Freelist(L);
return;
}
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//初始化顺序表
Sqlist *Initlist(Sqlist *L)
{
L=(Sqlist *)malloc(sizeof(Sqlist));
L->len=0;
return L;
}
//释放顺序表
void Freelist(Sqlist *L)
{
free(L);
}
//判断顺序表L是否为空表
int Listempty(Sqlist *L)
{
return(L->len==0);
}
//返回顺序表L的元素个数
int Listlength(Sqlist *L)
{
return(L->len);
}
//输出顺序表L
void Displist(Sqlist *L)
{
int i;
if(Listempty(L))
return;
for(i=0;i<L->len;i++)
printf("%c",L->date[i]);
printf("\n");
}
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype **e)
{
if(i<1||i>L->len)
return 0;
*e= (L->date+(i-1));
//e = &L->date[i-1];
return 1;
}
//在顺序表中查找元素e
int Locateelem(Sqlist *L,elemtype e)
{
int i=0;
while(i<L->len&&L->date[i]!=e)
i++;
if(i>=L->len)
return 0;
else
return i+1;
}
//在顺序表L中第i个位置上插入元素e
int Listinsert(Sqlist *L, int i, elemtype e)
{
int j;
if(i<1||i>L->len+1)
return 0;
for(j=L->len-1;j>=i-1;j--)
L->date[j+1]=L->date[j];
L->date[i-1]=e;
L->len++;
return 1;
}
//在顺序表L中删除第i个元素
int Listdelete(Sqlist *L,int i)
{
int j;
if(i<1||i>L->len)
return 0;
for(j=i-1;j<L->len-1;j++)
L->date[j]=L->date[j+1];
L->len--;
return 1;
}
//主函数
int main()
{
Sqlist *L=NULL;
elemtype *e=NULL;
printf("(1)ini L\n");
L=Initlist(L);
Getelem(L,3, &e);
printf("(6)the third elem=%c\n", *e);
printf("(7)a=%d\n",Locateelem(L,'a'));
printf("(8)input f in the 4 th\n");
Listinsert(L,4,'f');
printf("(9)output L:");
Displist(L);
printf("(10)delete the 3rd elem\n");
Listdelete(L,3);
printf("(11)output L:");
Displist(L);
printf("(12)free L\n");
Freelist(L);
return;
}
#14
哈哈,都出来啦。
原来是重复定义
直接把主函数里的那个结构体定义删掉就可以啦!
谢谢楼上高手哦!!
原来是重复定义
直接把主函数里的那个结构体定义删掉就可以啦!
谢谢楼上高手哦!!
#15
不用谢
#1
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
e=L->date+(i-1);
return 1; //这里是return e吧
}
#2
调用的通过指针传回去的,elemtype *e 不是通过return返回的。就是return 1。
#3
修改方法
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e= *(L->date+(i-1));
//e = &L->date[i-1];
return 1;
}
main中:
e = (char *)malloc(sizeof(char));
Getelem(L,3,e);
printf("(6)the third elem=%c\n", *e);
分配一个存储空间存放
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e= *(L->date+(i-1));
//e = &L->date[i-1];
return 1;
}
main中:
e = (char *)malloc(sizeof(char));
Getelem(L,3,e);
printf("(6)the third elem=%c\n", *e);
分配一个存储空间存放
#4
or:
elemtype e;
Getelem(L,3,&e);
printf("(6)the third elem=%c\n", e);
elemtype e;
Getelem(L,3,&e);
printf("(6)the third elem=%c\n", e);
#5
谢谢楼上高手指点!!!
但是其中有一处不行
就是在:
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
e = &L->date[i-1];
return 1;
}
这样子运行时结果还是一样,没办法出来!!
只有:
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e= *(L->date+(i-1));
return 1;
}
这样子才可以。。
而对于主函数中的调用,两种方法都行!!
但是其中有一处不行
就是在:
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
e = &L->date[i-1];
return 1;
}
这样子运行时结果还是一样,没办法出来!!
只有:
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e= *(L->date+(i-1));
return 1;
}
这样子才可以。。
而对于主函数中的调用,两种方法都行!!
#6
还有一点问题就是,上面的那个程序是我从下面的这个程序改过来的。而下面的这个程序中有个问题看不懂。
麻烦下高手再帮忙看下!!
//文件名:algo2-1.cpp
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist; //顺序表类型定义
//初始化顺序表
Sqlist *Initlist(Sqlist *L)
{
L=(Sqlist *)malloc(sizeof(Sqlist));
L->len=0;
return L;
}
//释放顺序表
void Freelist(Sqlist *L)
{
free(L);
}
//判断顺序表L是否为空表
int Listempty(Sqlist *L)
{
return(L->len==0);
}
//返回顺序表L的元素个数
int Listlength(Sqlist *L)
{
return(L->len);
}
//输出顺序表L
void Displist(Sqlist *L)
{
int i;
if(Listempty(L)) return;
for(i=0;i<L->len;i++)
printf("%c",L->date[i]);
printf("\n");
}
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e=*(L->date+(i-1));
return 1;
}
//在顺序表中查找元素e
int Locateelem(Sqlist *L,elemtype e)
{
int i=0;
while(i<L->len&&L->date[i]!=e)
i++;
if(i>=L->len)
return 0;
else
return i+1;
}
//在顺序表L中第i个位置上插入元素e
int Listinsert(Sqlist *L, int i, elemtype e)
{
int j;
if(i<1||i>L->len+1)
return 0;
for(j=L->len-1;j>=i-1;j--)
L->date[j+1]=L->date[j];
L->date[i-1]=e;
L->len++;
return 1;
}
//在顺序表L中删除第i个元素
int Listdelete(Sqlist *L,int i)
{
int j;
if(i<1||i>L->len)
return 0;
for(j=i-1;j<L->len-1;j++)
L->date[j]=L->date[j+1];
L->len--;
return 1;
}
//文件名:exp2-1.cpp
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//调用外部函数
extern Sqlist *Initlist(Sqlist *L);
extern void Freelist(Sqlist *L);
extern int Listempty(Sqlist *L);
extern int Listlength(Sqlist *L);
extern void Displist(Sqlist *L);
extern int Getelem(Sqlist *L,int i,elemtype *e);
extern int Locateelem(Sqlist *L, elemtype e);
extern int Listinsert(Sqlist *L, int i, elemtype e);
extern int Listdelete(Sqlist *L,int i);
//主函数
void main()
{
Sqlist *L;
elemtype e;
printf("(1)初始化顺序表L\n");
L=Initlist(L);
printf("(2)依次采用尾插入法插入a,b,c,d,e元素\n");
Listinsert(L,1,'a');
Listinsert(L,2,'b');
Listinsert(L,3,'c');
Listinsert(L,4,'d');
Listinsert(L,5,'e');
printf("(3)输出顺序表L:");
Displist(L);
printf("(4)顺序表L长度=%d\n",Listlength(L));
printf("(5)顺序表L为%s\n",(Listempty(L)?"空":"非空"));
Getelem(L,3,&e);
printf("(6)顺序表L的第3个元素=%c\n",e);
printf("(7)元素a的位置=%d\n",Locateelem(L,'a'));
printf("(8)在第4个元素位置上插入f元素\n");
Listinsert(L,4,'f');
printf("(9)输出顺序表L:");
Displist(L);
printf("(10)删除L的第3个元素\n");
Listdelete(L,3);
printf("(11)输出顺序表L:");
Displist(L);
printf("(12)释放顺序表L\n");
Freelist(L);
}
其中下面程序中的 }Sqlist; 中出错!!
错误提示是:error C2371:'Sqlist' : redefinition: different basic types
//文件名:exp2-1.cpp
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//调用外部函数
麻烦下高手再帮忙看下!!
//文件名:algo2-1.cpp
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist; //顺序表类型定义
//初始化顺序表
Sqlist *Initlist(Sqlist *L)
{
L=(Sqlist *)malloc(sizeof(Sqlist));
L->len=0;
return L;
}
//释放顺序表
void Freelist(Sqlist *L)
{
free(L);
}
//判断顺序表L是否为空表
int Listempty(Sqlist *L)
{
return(L->len==0);
}
//返回顺序表L的元素个数
int Listlength(Sqlist *L)
{
return(L->len);
}
//输出顺序表L
void Displist(Sqlist *L)
{
int i;
if(Listempty(L)) return;
for(i=0;i<L->len;i++)
printf("%c",L->date[i]);
printf("\n");
}
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e=*(L->date+(i-1));
return 1;
}
//在顺序表中查找元素e
int Locateelem(Sqlist *L,elemtype e)
{
int i=0;
while(i<L->len&&L->date[i]!=e)
i++;
if(i>=L->len)
return 0;
else
return i+1;
}
//在顺序表L中第i个位置上插入元素e
int Listinsert(Sqlist *L, int i, elemtype e)
{
int j;
if(i<1||i>L->len+1)
return 0;
for(j=L->len-1;j>=i-1;j--)
L->date[j+1]=L->date[j];
L->date[i-1]=e;
L->len++;
return 1;
}
//在顺序表L中删除第i个元素
int Listdelete(Sqlist *L,int i)
{
int j;
if(i<1||i>L->len)
return 0;
for(j=i-1;j<L->len-1;j++)
L->date[j]=L->date[j+1];
L->len--;
return 1;
}
//文件名:exp2-1.cpp
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//调用外部函数
extern Sqlist *Initlist(Sqlist *L);
extern void Freelist(Sqlist *L);
extern int Listempty(Sqlist *L);
extern int Listlength(Sqlist *L);
extern void Displist(Sqlist *L);
extern int Getelem(Sqlist *L,int i,elemtype *e);
extern int Locateelem(Sqlist *L, elemtype e);
extern int Listinsert(Sqlist *L, int i, elemtype e);
extern int Listdelete(Sqlist *L,int i);
//主函数
void main()
{
Sqlist *L;
elemtype e;
printf("(1)初始化顺序表L\n");
L=Initlist(L);
printf("(2)依次采用尾插入法插入a,b,c,d,e元素\n");
Listinsert(L,1,'a');
Listinsert(L,2,'b');
Listinsert(L,3,'c');
Listinsert(L,4,'d');
Listinsert(L,5,'e');
printf("(3)输出顺序表L:");
Displist(L);
printf("(4)顺序表L长度=%d\n",Listlength(L));
printf("(5)顺序表L为%s\n",(Listempty(L)?"空":"非空"));
Getelem(L,3,&e);
printf("(6)顺序表L的第3个元素=%c\n",e);
printf("(7)元素a的位置=%d\n",Locateelem(L,'a'));
printf("(8)在第4个元素位置上插入f元素\n");
Listinsert(L,4,'f');
printf("(9)输出顺序表L:");
Displist(L);
printf("(10)删除L的第3个元素\n");
Listdelete(L,3);
printf("(11)输出顺序表L:");
Displist(L);
printf("(12)释放顺序表L\n");
Freelist(L);
}
其中下面程序中的 }Sqlist; 中出错!!
错误提示是:error C2371:'Sqlist' : redefinition: different basic types
//文件名:exp2-1.cpp
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//调用外部函数
#7
改成这样看看
int Getelem(Sqlist *L,int i,elemtype *&e)
{
if(i<1||i>L->len)
return 0;
e=L->date+(i-1);
return 1;
}
int Getelem(Sqlist *L,int i,elemtype *&e)
{
if(i<1||i>L->len)
return 0;
e=L->date+(i-1);
return 1;
}
#8
不行。
错误提示:
missing ')' before '&'
missing '{' before '&'
错误提示:
missing ')' before '&'
missing '{' before '&'
#9
楼主从来不结贴啦!!!
#10
问题还没解决,怎么结啊??!!
#11
这是我的第一帖啊!!呵呵……
#12
int Getelem(Sqlist *L,int i,elemtype *e)
{
if(i<1||i>L->len)
return 0;
*e = L->date[i-1];
//e=L->date+(i-1);
return 1;
}
函数中e本来要做传出参数,但是,函数中e=L->date+(i-1),是把e指针指向另外的地址,等于丢掉了原来的地址
就无法做传出参数了
函数中应该是给*e赋值才对
另外,建议调用函数时如下使用
char e = '0';
Getelem(L,3,&e);
{
if(i<1||i>L->len)
return 0;
*e = L->date[i-1];
//e=L->date+(i-1);
return 1;
}
函数中e本来要做传出参数,但是,函数中e=L->date+(i-1),是把e指针指向另外的地址,等于丢掉了原来的地址
就无法做传出参数了
函数中应该是给*e赋值才对
另外,建议调用函数时如下使用
char e = '0';
Getelem(L,3,&e);
#13
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//初始化顺序表
Sqlist *Initlist(Sqlist *L)
{
L=(Sqlist *)malloc(sizeof(Sqlist));
L->len=0;
return L;
}
//释放顺序表
void Freelist(Sqlist *L)
{
free(L);
}
//判断顺序表L是否为空表
int Listempty(Sqlist *L)
{
return(L->len==0);
}
//返回顺序表L的元素个数
int Listlength(Sqlist *L)
{
return(L->len);
}
//输出顺序表L
void Displist(Sqlist *L)
{
int i;
if(Listempty(L))
return;
for(i=0;i<L->len;i++)
printf("%c",L->date[i]);
printf("\n");
}
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype **e)
{
if(i<1||i>L->len)
return 0;
*e= (L->date+(i-1));
//e = &L->date[i-1];
return 1;
}
//在顺序表中查找元素e
int Locateelem(Sqlist *L,elemtype e)
{
int i=0;
while(i<L->len&&L->date[i]!=e)
i++;
if(i>=L->len)
return 0;
else
return i+1;
}
//在顺序表L中第i个位置上插入元素e
int Listinsert(Sqlist *L, int i, elemtype e)
{
int j;
if(i<1||i>L->len+1)
return 0;
for(j=L->len-1;j>=i-1;j--)
L->date[j+1]=L->date[j];
L->date[i-1]=e;
L->len++;
return 1;
}
//在顺序表L中删除第i个元素
int Listdelete(Sqlist *L,int i)
{
int j;
if(i<1||i>L->len)
return 0;
for(j=i-1;j<L->len-1;j++)
L->date[j]=L->date[j+1];
L->len--;
return 1;
}
//主函数
int main()
{
Sqlist *L=NULL;
elemtype *e=NULL;
printf("(1)ini L\n");
L=Initlist(L);
Getelem(L,3, &e);
printf("(6)the third elem=%c\n", *e);
printf("(7)a=%d\n",Locateelem(L,'a'));
printf("(8)input f in the 4 th\n");
Listinsert(L,4,'f');
printf("(9)output L:");
Displist(L);
printf("(10)delete the 3rd elem\n");
Listdelete(L,3);
printf("(11)output L:");
Displist(L);
printf("(12)free L\n");
Freelist(L);
return;
}
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct
{
elemtype date[MAXSIZE];
int len;
}Sqlist;
//初始化顺序表
Sqlist *Initlist(Sqlist *L)
{
L=(Sqlist *)malloc(sizeof(Sqlist));
L->len=0;
return L;
}
//释放顺序表
void Freelist(Sqlist *L)
{
free(L);
}
//判断顺序表L是否为空表
int Listempty(Sqlist *L)
{
return(L->len==0);
}
//返回顺序表L的元素个数
int Listlength(Sqlist *L)
{
return(L->len);
}
//输出顺序表L
void Displist(Sqlist *L)
{
int i;
if(Listempty(L))
return;
for(i=0;i<L->len;i++)
printf("%c",L->date[i]);
printf("\n");
}
//获取顺序表L中第i个元素
int Getelem(Sqlist *L,int i,elemtype **e)
{
if(i<1||i>L->len)
return 0;
*e= (L->date+(i-1));
//e = &L->date[i-1];
return 1;
}
//在顺序表中查找元素e
int Locateelem(Sqlist *L,elemtype e)
{
int i=0;
while(i<L->len&&L->date[i]!=e)
i++;
if(i>=L->len)
return 0;
else
return i+1;
}
//在顺序表L中第i个位置上插入元素e
int Listinsert(Sqlist *L, int i, elemtype e)
{
int j;
if(i<1||i>L->len+1)
return 0;
for(j=L->len-1;j>=i-1;j--)
L->date[j+1]=L->date[j];
L->date[i-1]=e;
L->len++;
return 1;
}
//在顺序表L中删除第i个元素
int Listdelete(Sqlist *L,int i)
{
int j;
if(i<1||i>L->len)
return 0;
for(j=i-1;j<L->len-1;j++)
L->date[j]=L->date[j+1];
L->len--;
return 1;
}
//主函数
int main()
{
Sqlist *L=NULL;
elemtype *e=NULL;
printf("(1)ini L\n");
L=Initlist(L);
Getelem(L,3, &e);
printf("(6)the third elem=%c\n", *e);
printf("(7)a=%d\n",Locateelem(L,'a'));
printf("(8)input f in the 4 th\n");
Listinsert(L,4,'f');
printf("(9)output L:");
Displist(L);
printf("(10)delete the 3rd elem\n");
Listdelete(L,3);
printf("(11)output L:");
Displist(L);
printf("(12)free L\n");
Freelist(L);
return;
}
#14
哈哈,都出来啦。
原来是重复定义
直接把主函数里的那个结构体定义删掉就可以啦!
谢谢楼上高手哦!!
原来是重复定义
直接把主函数里的那个结构体定义删掉就可以啦!
谢谢楼上高手哦!!
#15
不用谢