1. 首页 > 科技

C语言线性表基本操作代码报错求大神指点(线性表的操作 程序 C语言 求大神解答)

C语言线性表基本操作代码报错求大神指点(线性表的操作 程序 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 ,没有问题

C语言数据结构线性表单链表的基本操作,写好了代码,编译没有错但运行有错,求找错误在哪?谢谢 #in

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对应的汇编并单步执行观察相应内存和寄存器变化。)

在vc++6.0下使用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); //

}