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...