在下正在学习数据结构中,将顺序表的一些功能集合起来编了一个程序,运行结果虽然没问题,但是总是多一些东西,请高手解答。我的程序如下:
#include<stdio.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct
{//定义一个顺序表
int *elem;
int length;
int listsize;
}SqList;
int InitList_Sq(SqList *L)
{//创建一个顺序表
L->elem=(int*)malloc(LIST_INIT_SIZE *sizeof(int));
if(!L->elem)
exit(-2);
L->length=0;
L->listsize=LIST_INIT_SIZE;
}
int ListDelete_Sq(SqList *L,int i,int *e)
{//删除顺序表中第i个元素,用e返回其值
int *p,*q;
if(i<1||i>L->length)
printf("i值不合法!");
p=L->elem+i-1;
*e=*p;
q=L->elem+L->length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L->length;
}
int LocateElem_Sq(SqList L,int e)
{//查找顺序表中元素e的位序
int i=1,*p;
p=L.elem;
while(i<=L.length&&(*p!=e))
{
i++;
p++;
}
if(i<=L.length)
return i;
else
return 0;
}
int ListInSert_Sq(SqList *L,int i,int e)
{//在顺序表第i个元素前面插入元素e
int *p,*q;
if(i<1||i>L->length+1)
printf("i值不合法!\n");
q=L->elem+i-1;
for(p=L->elem+L->length-1;p>=q;--p)
*(p+1)=*p;
*q=e;
++L->length;
}
main()
{
SqList M;
int i,e;
InitList_Sq(&M);
printf("请输入5个数字:");
for(i=0;i<5;i++)
scanf("%d",&M.elem[i]);
printf("请输入待删除数的位序:");
scanf("%d",&i);
ListDelete_Sq(&M,i,&e);
printf("被删除的数是:");
printf("%d\n",e);
printf("请输入你想查找的数字:");
scanf("%d",&e);
i=LocateElem_Sq(M,e);
printf("所查找的数字的位序是:%d\n",i);
printf("请输入要插入的数字以及在第几个位序前插入:");
scanf("%d%d",&e,&i);
ListInSert_Sq(&M,i,e);
printf("插入后的顺序表:\n");
for(i=0;i<5;i++)
printf("%4d",M.elem[i]);
getch();
}
运行结果如图:
关于C语言的顺序表 插入功能完成后不能输出正确数据?
顺序表不光数组不能越界,也不能跳越赋值,比如当前len是3,那么你最多只能赋值第4个元素,不能直接赋值第5个元素。2、for(j=len-1;j>point-1;j--)要改成for(j=L->length-1;j>=point-1;j--)。len是最初传递进来的长度,而你在循环中每次长度都在自增,所以不能用len(其实你所有函数...
C语言,执行顺序表的操作出现了语句不按编写的顺序运行的情况。求大神...
scanf("%d\\n",&n);scanf("%d\\n",&e);两个问题都是这样引起的,输入一个数加一个回车,所以变了输入一个数再加两个回车,第一个问题只要你不加第二个回车,数据会储在缓冲区,直到你输入回车后才scanf
顺序表用c语言表示,为什么我这段程序没有报错,但是程序运行得不到值...
Insert(p, 1, 1, 99);printf("%d", p->number[0]);}我的的运行结果是Segmentation fault.看看是不是有段使用了非法运算,或试图指向一个不存在的地址。
用C语言实现顺序表的输入输出,哪位大神帮忙检查下,输出不对
L->elem) exit(OVERFLOW); \/\/分配空间失败L->length = 0; \/\/空表长度为0L->maxsize = LIST_INIT_SIZE; \/\/初始存储容量return L;}\/\/InitList_Sq\/\/建立新表 void Buid(SqList *L) {ElemType *newbase,data;printf("输入元素:");scanf("%d",&data);if(L->length >= L-...
C语言顺序表的问题: L->length=0;这里为什么用箭头不用点作用符_百度知...
输入参数为Sqlist *L,是以指针的形式传递进来的,所以操作时就需要用->来操作L中的成员。
我想问一下这个C语言的顺序表为什么输入有小数点的数就陷入了死循环呢...
简单回答:整个程序都是在输入整数,所以不能输入带小数点的实数。举例说明:scanf("%d", &x);如果输入一个小数 23.54和回车, 则scanf只读掉23,留下 .54和回车 如果再次遇到 scanf("%d", ...)它不会输入新的内容,而是继续读剩下的 .54和回车。由于 .54不是整数,无法读,scanf 语句被...
我想问一下这个C语言的顺序表中第一次输入1,到提示输入时我输入我输入...
不妨在遇到问题 继续输入Y,停止输入N:时输入1 再遇到问题 继续输入Y,停止输入N:则输入n和回车 就可以结束了。总之,写程序应该养成良好习惯。在任何输入语句前都加输出语句,以便了解要输入什么内容。所以建议在第1行的scanf(...)前面加一个printf 显示提示文字,这样就不会发生误会了。输入单个字符...
一个关于C语言的问题,向顺序表中插入元素
insertPtr = item; \/\/在第i个位置插入元素item==>打错了,item换成val L->listsize = L->listsize+10; \/\/存储空间增大100单元==>增大10单元
C语言顺序表 合并
1、应该是编译时就存在问题吧,你在函数SequenceList中的语句table1[i] = scanf("%d",k);中的k未定义,导致有问题。解决这个问题要么将在main中定义k的语句移到SequenceList中,要么将k定义成全局变量;2、另外scanf("%d",k)请改成scanf("%d",&k)或者scanf("%d",&(table1[i]);。
c语言简单的顺序表,输了一个数据就退出了,可以帮我看一下哪里出错了吗...
{ char data;struct seqlist*next;}SeqList;这里成员变量next就是一个链表指针,之后你要构建最简单的单向链表,就是不断创建这个结构变量,然后让上一个结构的指针指向新创建的结构变量。第一个创建的叫首节点,你可以定义一个指针指向它,或者定义一个节点让其指针指向它(这个节点不保存数据,只用于...