C语言线性表基本操作代码报错求大神指点(线性表的操作 程序 C语言 求大神解答)
- 线性表的操作 程序 C语言 求大神解答
- c语言中,线性表的插入,删除,查找,显示基本功能,代码如下,具体查看插入代码,出错,请高手指点
- C语言数据结构线性表单链表的基本操作,写好了代码,编译没有错但运行有错,求找错误在哪?谢谢 #in
- 在vc++6.0下使用c语言编写创建线性表函数,错误很多,具体如下。 求高手指导!
线性表的操作 程序 C语言 求大神解答
#include<stdio.h>
//删除重复元素
void fun1(int *x, int *n){
int i,k=0,t;
for(i=0; i<*n; ){
t=x[k++]=x[i];
while(x[++i]==t);
}
*n=k;
}
//将x,y合并,保存于z
void fun2(int *x, int xn, int *y, int yn, int *z){
int i=0,j=0,k=0;
while(i<xn && j<yn){
if(x[i]<=y[j])
z[k]=x[i++];
else
z[k]=y[j++];
k++;
}
while(i<xn)
z[k++]=x[i++];
while(j<yn)
z[k++]=y[j++];
}
int main(void)
{
int a[10]={2,3,4,4,6,7,7,8,8,9};
int b[10]={2,3,4,4,6,7,7,8,8,9};
int c[5]={1,3,5,6,10};
int d[15];
int i,n=10;
fun1(a,&n);
for(i=0; i<n; i++)
printf("%4d",a[i]);
printf("\n\n");
fun2(b,10,c,5,d);
for(i=0; i<15; i++)
printf("%4d",d[i]);
printf("\n");
return 0;
}
c语言中,线性表的插入,删除,查找,显示基本功能,代码如下,具体查看插入代码,出错,请高手指点
void Insert_list(Sqlist &L,int pos,ElemType e)//在POS处插入e
{
int i;
if(pos < 1 || pos > L.length+1)
printf("The num is out!");
L.elem = (ElemType *)realloc(L.elem,(++L.length)*sizeof(ElemType));
//问题很绕主要就出在length你刚开始就加了1
if(pos == L.length)
L.elem[L.length-1] = e;
else
{
i = L.length - 2;
while(i != pos - 2) {
L.elem[i+1] = L.elem[i];
i--;
}
L.elem[++i] = e;
}
}
如果修改如下,是不是更容易理解:
void Insert_list(Sqlist &L,int pos,ElemType e)//在POS处插入e
{
int i;
if(pos < 1 || pos > L.length+1)
printf("The num is out!");
L.elem = (ElemType *)realloc(L.elem,(L.length + 1)*sizeof(ElemType));
if(pos == L.length + 1) //如果为之前的长度+1
L.elem[L.length] = e; //那么直接插在最后
else
{
i = L.length - 1; //否则从之前的最后一个元素开始遍历,也就是之前的长度-1的位置开始
while(i != pos - 2) { //找到pos-2的位置,其实是找pos-1的位置,即插入位置,但是为了移动元素,必须到pos-2,因为pos-1处的元素也需要向后移动,如果是到pos-1的话,那么pos-1处的元素将丢失
L.elem[i+1] = L.elem[i];
i--;
}
L.elem[++i] = e;//最终在pos-1处插入元素
}
L.length++;//最后再让长度加1
}
这样写似乎比较容易理解,先增加长度会使问题复杂化
测试前提:showList中i 测试样例 int main() { Sqlist L; Init_list(L); Insert_list(L,1,1); Insert_list(L,1,2); Insert_list(L,2,3); Insert_list(L,4,4); Insert_list(L,3,5); Show_list(L); } 测试结果 2 3 5 1 4 ,没有问题 VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。) #include #include // malloc #define Max 100 typedef struct { int data[Max]; int len; }Sqlist; int cSqlist(Sqlist **L,int a[],int n) { int i=0; *L=(Sqlist *)malloc(sizeof(Sqlist)); for(i=0;i { (*L)->data[i]=a[i]; } (*L)->len=n; return 1; } void display(Sqlist L) { int i; for(i=0;L.len>i;i++) { printf("%d -> ",L.data[i]); } } void main() { Sqlist *L; // Sqlist L; 这一句已经申请了空间,所以改成指针,在 cSqlist()里面申请空间 int a[5]={1,2,3,4,5}; int n=5; cSqlist(&L,a,n);//传入L的地址才能改变L的值 display(*L); // }C语言数据结构线性表单链表的基本操作,写好了代码,编译没有错但运行有错,求找错误在哪?谢谢 #in
在vc++6.0下使用c语言编写创建线性表函数,错误很多,具体如下。 求高手指导!