新手菜鸟,数据结构,单链表的实现(c语言),求教大佬

liciour 2019-10-05 07:19:04
#include <iostream>
#include<malloc.h>
#include <stdlib.h>
#include <cstring>
#include<stdio.h>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define sqList ElemType
typedef int Status;
typedef struct {
char sno[10];// 问题一,这里改成string,运行就出错了
char sname[10];//问题二,运行后插入位置是1可以,位置是2就无法运行了
}sqList; //拜托大佬了。刚学数据结构,查拉半天书,还是没找出来问题
typedef struct Lnode{
struct Lnode *next;
ElemType date;
}Lnode,*Listp;
int ListLength(Listp L)//链表的长
{
Listp p=L;int sum=0;
while(p)
{
sum++;
p=p->next;
}
return sum-1;//去除头结点
}
int ListInsert(Listp L, int i, ElemType e, int(*ListLength)(Listp))
{ //插入一个
int a=1;
Listp p,q;
q=(Listp)malloc(sizeof(Lnode));
q->date=e;
p=L;
for(;a<i;i++)p=p->next;
q->next=p->next;
p->next=q;
return 1;
}

Status ListTraverse(Listp L, void(*visit)(ElemType)) {

int i=0;
Listp p;
p=L;
for (;p->next;)
{
printf("第%d个:",++i);
(*visit)((p->next)->date);
p=p->next;
}
return 0;
}
int LnodepDelete(Listp L, int i) {//删除数据
Listp q,P;
P = L; //定义指针P指向链表要删除的链表List的第一个点节点
for(int a=1;a<=i;a++) P=P->next;
q = P->next; //临时Tmp指向要删除的节点的下个节点
P = q->next; //重新赋值
free(q); //释放指针P指向的节点

printf("删除链表成功!\n");
return 1;
}
void visit (ElemType e)
{
printf("名字是:%s 电话是:%s\n", e.sname, e.sno);

}
ElemType A;
int pan,i,j=1;

int main()
{
Listp L1;
L1=(Listp)malloc(sizeof(Lnode));
L1->next=NULL;
printf("1.遍历2.插入3删除4.查找名5.查找电话\n ");
for (; j > 0; )
{

scanf("%d", &pan);
switch (pan)
{
case 1:
{
ListTraverse(L1, visit);
break;}
case 2: //插入学生信息
{
printf("插入位置: ");
scanf("%d", &i);
if(i<1||i>ListLength(L1)+1){printf("输入错误");break;}
printf("姓名: ");
scanf("%s", &A.sname);
printf("学号: ");
scanf("%s", &A.sno);
ListInsert(L1, i, A,ListLength);
ListTraverse(L1, visit);
break;
}

case 3://删除第i个元素
{ printf("删除元素是第");
scanf("%d", &j);
LnodepDelete(L1,j);
ListTraverse(L1, visit);
break;
}
default:printf("输入错误!!!\n");
}}
return 0;
}

...全文
174 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
铖邑 2019-10-05
  • 打赏
  • 举报
回复
方便的话麻烦结帖一下
铖邑 2019-10-05
  • 打赏
  • 举报
回复
好的,都是细活,需要有足够的耐心
liciour 2019-10-05
  • 打赏
  • 举报
回复
找到错误了,for(;a<i;i++)p=p->next;仔细和别的代码对比了一下,没有与用法错误,a++写成i++了,
刚开始一直以为是逻辑错误
铖邑 2019-10-05
  • 打赏
  • 举报
回复
算法数据结构是要去耐心调试的,每个人都要走这样的过程
liciour 2019-10-05
  • 打赏
  • 举报
回复
引用 1 楼 SuperDay 的回复:
C语言没有string,第二个问题要慢慢调试

感谢大佬,明白了一个
铖邑 2019-10-05
  • 打赏
  • 举报
回复
C语言没有string,第二个问题要慢慢调试

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧