1. 程式人生 > >求大神幫我看看這個題的插入演算法中哪裡錯了??(帶頭節點的單鏈表)

求大神幫我看看這個題的插入演算法中哪裡錯了??(帶頭節點的單鏈表)

#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(chioce2) {

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