單鏈表的一些常用操作

2021-06-01 13:46:30 字數 2508 閱讀 6745

#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 構造節點,指定元素和後繼結點 ...