迴圈鍊錶尾指標

2021-07-24 03:51:12 字數 3354 閱讀 1613

1 對於兩個鍊錶之間的操作非常合適

#include "string.h"

#include "ctype.h"

#include "stdio.h"

#include "stdlib.h"

#include "io.h"

#include "math.h"

#include "time.h"

#define ok 1

#define error 0

#define true 1

#define false 0

#define maxsize 1000 /* 儲存空間初始分配量 */

typedef int elemtype ;

typedef int status ;

typedef struct nodenode;

typedef struct node* linklist;

status listemety(linklist l)else

}status getelem(linklist l ,int i , elemtype *e)

// printf("%p",p);

if( j>i)

*e = p->data;

}status listinsert(linklist *l , int i, elemtype e)

while(j//j

1個位置

p = p->next;

++j;

if(p == (*l)->next)//這裡是為了防止i越界,當條件成立時說明已經到煉表頭了

return error;

}if(j>i)

s = (linklist)malloc(sizeof(node));

s->data = e ;

s->next = p->next;

p->next = s;

if(p==*l) //判斷假如有兩個位置12,插入到第三個位置的情況

return ok ;

}status initlist(linklist *l) //注意這裡使用了二級指標 不用一級指標是因為l是在棧中新開闢的元素,

//和原p指向同一記憶體位址,而這裡修改了l的指向的記憶體空間,但指標p還是沒有變化,

//還造成了記憶體洩漏,在堆中申請的記憶體空間無法訪問

status listdelete(linklist *l , int i , elemtype *e)

if(j>i)

q = p->next;

p->next = q->next;

*e = q->data;

if(q == *l) //q是最後乙個節點,而l是尾指標會和q相等

*l = p;

free(q);

return ok;

}void createlisthead(linklist*l ,int n )

}}void createlisttail(linklist * l ,int n)

r->next = p;//(最後乙個節點指向頭)

}status clearlist(linklist *l)

(*l) = q ; //頭節點的指標域為空

return ok;

}int listlength(linklist l)

return i;

}/* 初始條件:順序線性表l已存在 */

/* 操作結果:返回l中第1個與e滿足關係的資料元素的位序。 */

/* 若這樣的資料元素不存在,則返回值為0

*/int locateelem(linklist l,elemtype e)

return0;}

void unionrear(linklist rear1 , linklist rear2 )

}int main()

printf("\n");

//手動刪除

printf("%d\n",listdelete(&rear,2,&value));

p=rear->next->next;

while(p!=rear->next)

printf("\n");

//得到第i個位置上的值

int value2;

printf("%d\n",getelem(rear,1,&value2));

printf("%d\n",value2);

printf("\n");

//計算長度

linklist rear1;

initlist(&rear1);

printf("%d\n",listinsert(&rear1,1,5));

printf("%d\n",listinsert(&rear1,1,5));

printf("%d\n",listinsert(&rear1,3,7));

printf("%d\n",listinsert(&rear1,22,4));

printf("%d\n",listlength(rear1));

printf("\n");

//計算與輸入元素相等的位置

printf("%d\n",locateelem(rear1,7));

//清空鍊錶

printf("\n");

printf("%p\n",rear1);

clearlist(&rear1);

printf("%p\n",rear1);

printf("\n");

//頭插法

linklist headinsert;

createlisthead(&headinsert,10);

linklist headinserthead;

headinserthead=headinsert->next->next;

while(headinserthead!=headinsert->next)

//尾插法

printf("\n");

linklist tailinsert;

createlisthead(&tailinsert,12);

linklist headinserttail;

headinserttail=tailinsert->next->next;

while(headinserttail!=tailinsert->next)

printf("\n");

//union

unionrear(headinsert,tailinsert);

linklist u = tailinsert->next->next;

while(u != tailinsert->next)

return

0;}

迴圈鍊錶 建立(設定尾指標)

迴圈鍊錶設定尾指標可以通過尾指標即時找到頭節點 便於兩個迴圈鍊錶的合併!擼 單迴圈鍊錶是設定尾指標表示 合併迴圈鍊錶o 1 include include includeusing namespace std struct node node crate cir node head,int n he...

使用只有表尾指標或只有表頭指標的單迴圈鍊錶的情況

使用只有表尾指標沒有表頭指標 迴圈單鏈表指的是最後節點的指標域指向表頭節點,如果要刪除第乙個元素,只需要通過表尾指標找到第二個節點,然後將最後節點的指標指向第二個節點,就將第乙個元素刪除了 單鏈表指的是最後節點的指標域指向 表頭節點,如果要刪除第乙個元素,只需要通過表尾指標找到第二個節點,然後將最後...

(含頭指標以及尾指標)迴圈雙向鍊錶各類功能的實現

對迴圈雙鏈表實現下述功能 void meau 選單函式 void initlist list list 初始化 void show list list 列印鍊錶內容 bool push back list list,elemtype x 尾插法 bool push front list list,e...