求大神帮我看看这个题的插入算法中哪里错了??(带头节点的单链表)

#include<stdio.h>
#include<stdlib.h>
typedef int elementype;
#define OK 1
#define EORR 0
typedef struct node
{
elementype element;
struct node *link;
}node;
typedef struct
{
struct node head;/定义头指针/
int n;
}headerlist;
elementype init(headerlist p)/对带头结点的链表进行初始化/
{
p->head=(node
)malloc(sizeof(node));
if(!p->head) return EORR;
p->head->link=NULL;
p->n=0;
return OK;
}
struct headerlist
input(headerlist *p,int maxsize)/利用尾插法创建链表/
{
node *q,s;
int i;
/p=(node)malloc(sizeof(node));
/
q=p->head;
for(i=0;i<maxsize;i++)
{
s=malloc(sizeof(node));
printf(“请输入第%d个数”,i+1);
scanf("%d",&s->element);
q->link=s;
q=s;
p->n++;
}
q->link=NULL;
return p;
}
elementype find(headerlist *p,int i)/遍历查找元素/
{
node *q;
int x;
q=p->head;
elementype j;
if(i<0||i>p->n-1) return EORR;
for(j=0;j<i;j++)
{
q=q->link;
}
x=q->element;
return x;
}
/struct headerlist/elementype insert(headerlist *p,int i,int x)/单链表的插入/
{
node *q,*s;
int j;
q=p->head;
if(i<0||i>p->n) return EORR;
for(i=0;j<=i;j++)
q=q->link;
s=malloc(sizeof(node));
s->element=x;
s->link=q->link;
q->link=s;
p->n++;
return OK;
}
elementype Delete(headerlist *p,int i)
{
node *q,*s;
int j;
if(!p->n) return EORR;
if(i<0||i>p->n-1) return EORR;
q=p->head;
for(j=0;j<i;j++)
q=q->link;
s=q->link;
q->link=s->link;
free(s);
p->n–;
return OK;
}

elementype output(headerlist *p )
{
node *s;
s=p->head->link;
int i;
if(!p) return EORR;
for(i=0;in;i++)
{

       printf("%d",s->element);
       s=s->link;
   }
   return OK;

}

void main()
{
headerlist p,q,s;
node w;
int x,chioce,i,j,t;
char answer;
init(&p);
printf(“您输入的数字个数为:”);
scanf("%d",&x);
q=input(&p,x);
do{
printf("
*********************\n");
printf(“1.查找 2.插入 3.删除\n”);
printf("************************\n");
printf(“您的选择是:”);
scanf("%d",&chioce);
if(chioce1)
{
printf(“请输入您要查找的元素位置:”);
scanf("%d",&i);
printf(“您查找的元素为%d”,find(q,i));
}
if(chioce
2)
{

    printf("请输入您要插入的位置:");
    scanf("%d",&i);
    printf("请输入您要插入的元素:");
    scanf("%d",&j);
    insert(q,i,j);
    output(q);
}
if(chioce==3)
{
    printf("请输入您要删除元素的位置:");
    scanf("%d",&t);
    Delete(q,t);
    output(q);
}
printf("\n");
printf("您是否想再试一次?(y/n)");
getchar();
answer=getchar();

}while(answer==‘y’||answer==‘Y’);
}

猜你喜欢

转载自blog.csdn.net/weixin_43077546/article/details/82828600