欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-15 20:35:17
...

#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’);
}