新手菜鸟,数据结构,单链表的实现(c语言),求教大佬
#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;
}