软件小白; 2022-03-31 15:40 采纳率: 0%
浏览 22

数据结构链表删除、查找等等

#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef int status;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
LinkList CreateList_L(int *a,int n){//创建
LinkList L,r,p;int i;
L=r=(LinkList )malloc(sizeof(LNode));
for(i=0;i<n;i++){
p=(LinkList)malloc(sizeof(LNode));
p->data=a[i];
r->next=p;
r=p;
printf(" ");
}
r->next=NULL;
return L;
}
LinkList LocateList_L(LinkList L,ElemType x){//查找
LinkList p=L->next;
while(p&&p->data!=x){
p=p->next;
}
if(!p) return ERROR;
return p;
}
status ListDelete_L(LinkList L,ElemType e){
LinkList pre=L,p=L->next;
while(p&&p->data!=e){
pre=p;
p=p->next;
}
pre->next=p->next;
e=p->data;
free(p);
return OK;
}
status ListInsert_L(LinkList L,ElemType e,int i){
LinkList p=L->next,s;
int j=0;
while(p&&j<i-1){
p=p->next;
++j;
}
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
void show_L(LinkList L){
LinkList p=L->next;
while(p){
printf("%d ",p->data);
p=p->next;
}

}
int main(){
LinkList p,L;
int a[10],n,i,x;

printf("请输入链表的长度:");
scanf("%d",&n);
printf("请输入链表的数值:");
for(i=0;i<n;i++){
    scanf("%d",&a[i]);
}
printf("\n");
L=CreateList_L(a,n);
show_L(L);
printf("\n");

printf("请输入要查找的数:");
scanf("%d",&i);
p=LocateList_L(L,i);
if(!p){
    printf("Not found\n");
}
else printf("found\n");

printf("请输入要删除的数:");
scanf("%d",&x);
if(!ListDelete_L(L,x))
    printf("not found\n");
else {
    printf("删除成功");
    show_L(L);
    printf("\n");
}

printf("请输入要插入的位置:");
scanf("%d",&i);
printf("\n");
printf("请输入要插入的值:");
scanf("%d",&x);
printf("\n");
if(!ListInsert_L(L,x,i))
    printf("not found");
else{
    printf("插入成功");
    show_L(L);
}
return 0;

}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-03-31 17:08
    关注

    删除函数有点问题,修改如下,供参考:

    status ListDelete_L(LinkList L, ElemType e) {
        LinkList pre = L, p = L->next;
        while (p && p->data != e) {
            pre = p;
            p = p->next;
        }
        if (p) {   //修改
            pre->next = p->next;
            e = p->data;
            free(p);
        }
        else
            return ERROR;  //修改
        return OK;
    }
    
    
    评论

报告相同问题?

问题事件

  • 修改了问题 4月3日
  • 创建了问题 3月31日

悬赏问题

  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
  • ¥45 求17位带符号原码乘法器verilog代码
  • ¥20 PySide6扩展QLable实现Word一样的图片裁剪框
  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢