#include #include #include #define ok 1
#define error 0
#define true 1
typedef struct lnodelnode,*linklist; //linklist是結構指標,在下面定義結構體指標的時候不能夠加*
/****獲得單鏈表第i個位置處的元素,賦值給*e******/
int getelem(linklist l,int i,int *e)//這樣linklist *l是錯誤的,
while(p&&jnext;
j++; }
if(!p || j>i)
return error;
*e = p->data; //要在形參中能夠改變實參的值,必須傳遞實參的位址
return ok;
}/****將元素e插入節點i前面******/
int listinsert(linklist l,int i,int e)
if(!p || j>i-1)
return error;
s = (linklist )malloc(sizeof(lnode));
s->data = e;
s->next = p->next;
p->next = s;
return ok;
}int listdelete(linklist l,int i,int *e)
if(!p || j>i-1)
return error;
s = p->next;
p->next = p->next->next;
*e = s->data;
free(s);
return ok;
}int printlist(linklist l)
p = l->next;
while(p)
return ok;
}void createlisttail(linklist l,int n) }
void createlisthead(linklist l,int n)
}void inverselist(linklist l)
}void clearlist(linklist l)
}void listinte***ce()
void creatlistinte***ce()
int main(int argc,char *argv)
switch(listchoice)
switch(creatlistchoice)
break;
case 2:
printf("please enter the number of element:\n");
scanf("%d",&get);
getelem(list,get,&getelem);
printf("the element is:%d\n",getelem);
break;
case 3:
printf("please enter the insert position:\n");
scanf("%d",&location);
printf("please enter the insert element:\n");
scanf("%d",&inselem);
listinsert(list,location,inselem);
break;
case 4:
printf("please enter the delete position:\n");
scanf("%d",&del);
listdelete(list,del,&delelem);
printf("the removed element is:\n");
printf(" %d\n",delelem);
break;
case 5:
printf("the list is:");
printlist(list);
printf("\n");
break;
case 6:flag = 1;
break;
} if(flag)
} return exit_success;
}
上午除錯了一下單鏈表操作的**,浪費了一上午時間,寫**的時候總是出現一些小的bug,主要如下:
1、寫scanf()函式的時候,寫成scanf("%d ",i),顯然這樣有問題,scanf中格式符後面不用空格也不用加"\n",開始的時候 就是寫成空格,後來輸入5個元素後,怎麼也結束不了。還有i一定要取位址,就是因為沒有取位址這個小bug,導致 除錯很長時間;
2、函式呼叫的時候,一定是實參傳值給形參,要改變實參,只能把實參位址傳給形參;
3、建立鍊錶的時候,一定要在呼叫建立鍊錶函式前,對節點分配記憶體。不能在建立鍊錶函式中分配。
下面直接上除錯好的**吧:
單鏈表的一些操作
1 有頭結點方便對首元資料元素的刪除,插入操作。不帶頭結點要判斷是不是作用在首元,是就得改變頭指標指向。2 頭結點資料域可以存表長。head data k 1 取倒數第k個元素。兩遍。走一遍,定義兩個指標,先走乙個,使兩個之間相差k個位置,再一起移動,走得快的的走到空了,走得慢的的資料域就是指定元素...
單鏈表的一些基本操作
本文主要介紹了單鏈表的初始化 頭插 頭刪 尾插 尾刪 查詢 指定位刪除 指定數刪除 指定位插入 銷毀 排序等.標頭檔案 ifndef linklist h define linklist h include include includetypedef int datatype typedef st...
單鏈表的建立和一些操作
個人建立的乙個類,實現單鏈表的基本操作,算是對資料結構知識的一點溫習.ifndef templist h define templist h include include template class node node t data,node next1 null 構造節點,指定元素和後繼結點 ...