线性表初始化赋值操作用c语言怎么写,线性表的基本操作解决方法

线性表的基本操作

运行到删除就错了,谁帮忙改改,谢谢!

#include 

#define MAXSIZE 100

#define OK 1

#define ERROR 0

typedef int ElemType;

typedef struct

{

ElemType elem[MAXSIZE];

int last;

int length;

}SeqList;

int InitList(SeqList *L)//初始化线性表

{

L->length=0;

return OK;

}

int InsList(SeqList *L,int i,ElemType x)//在i位置插入x

{

int k;

if((i<1)||(i>L->last+2))

{

printf("插入位置不合法");

return ERROR;

}

if(L->last==MAXSIZE-1)

{

printf("表已满,无法插入");

return ERROR;

}

for(k=L->last;k>=i-1;k--)

L->elem[k+1]=L->elem[k];

L->elem[i-1]=x;

L->last++;

return OK;

}

int Locate(SeqList *L,ElemType x)//查找元素的位置

{

int i=0;

while((i<=L->last)&&(L->elem[i]!=x))

i++;

if(i<=L->last)

return (i+1);

else

return (-1);

}

int DelList(SeqList *L,int i,ElemType *e)//删除指定的数据

{

int k;

*e=L->elem[i-1];

for(k=i;k<=L->last;k++)

L->elem[k-1]=L->elem[k];

L->last--;

return OK;

}

int main()

{

SeqList *L;

int i,j,h;

ElemType x,y;

ElemType *e;

L=(SeqList *)malloc(sizeof(SeqList));

InitList(L);

printf("输入线性表的长度\n");

scanf("%d",&(L->length));

L->last=L->length-1;

printf("输入线性表的数据元素\n");

for(i=0;ilength;i++)

scanf("%d",&(L->elem[i]));

printf("输入要插入数据的位置和数据\n");

scanf("%d %d",&j,&x);

if(InsList(L,j,x))

{

printf("插入成功!\n");

printf("插入后的数据为\n");

for(i=0;i<=L->last;i++)

printf("%d",L->elem[i]);

printf("\n");

}

else

printf("插入不成功!\n");

printf("输入要删除的数据\n");

scanf("%d",&y);

h=Locate(L,y);

if(h!=-1)

{

DelList(L,h,e);

printf("成功删除后的数据为\n");

for(i=0;i<=L->last;i++)

printf("%d",L->elem[i]);

printf("\n");

}

else

printf("要删除的数据不存在\n");

for(i=0;i<=L->last;i++)

printf("%d",L->elem[i]);

free(L);

}

------解决思路----------------------

DelList(L,h,e); // 这个e是个未经初始化的野指针,在DelList里面直接给*e赋值是要出问题的。

而且我没看懂DelList里面这一行是干什么的*e=L->elem[i-1];

直接改成DelList(SeqList *L,int i)不就很好吗,多个参数是什么作用呢?

------解决思路----------------------

仅供参考//带表头结点的单向链表

#include 

#include 

#include 

#include 

struct NODE {

int          data;

struct NODE *next;

} H,*head,*p,*q,*s1,*s2,*s3,*s4,*s;

int i,j,k,n,t,m;

int main() {

srand(time(NULL));

//填写头节点数据

H.data=-1;

H.next=NULL;

head=&H;

//创建10个节点的单链表

p=head;

for (i=0;i<10;i++) {

q=(struct NODE *)malloc(sizeof(struct NODE));

if (NULL==q) return 1;

q->data=rand()%100;//填写0..99的随机值

q->next=NULL;

p->next=q;

p=q;

}

//输出整个单链表

s=head->next;

while (1) {

if (NULL==s) {

printf("\n");

break;

}

printf("%02d->",s->data);

s=s->next;

}

//将值为5的结点插入到单链表的第k个结点前

k=3;

n=0;

p=head;

while (1) {

if (NULL==p) {

break;

}

n++;

if (k==n) {

q=(struct NODE *)malloc(sizeof(struct NODE));

if (NULL==q) return 1;

q->data=5;

q->next=p->next;

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值