单向链表的实现
文章目錄
- 單向鏈表的實現
單向鏈表的實現
源代碼地址
定義鏈表節點
LinkList L;
typedef struct Node {ElemType data; // 節點中的數據struct Node *next; // 指向下一個節點的指針 }Node;typedef struct Node *LinkList; /* 定義LinkList */初始化單項鏈表
InitList(&L);
/* 初始化順序線性表 */ Status InitList(LinkList *L) {*L=(LinkList)malloc(sizeof(Node)); /* 產生頭結點,并使L指向此頭結點 */if(!(*L)) /* 存儲分配失敗 */{return ERROR;}(*L)->next=NULL; /* 指針域為空 */return OK; }計算鏈表的長度
/* 初始條件:順序線性表L已存在。操作結果:返回L中數據元素個數 */ int ListLength(LinkList L) {int i=0;//< 鏈表開始是在L->next指向的鏈表LinkList p=L->next; /* p指向第一個結點 */while(p){i++;p=p->next;}return i; }查看鏈表數據
Status visit(ElemType c) {printf("%d ",c);return OK; }/* 初始條件:順序線性表L已存在 */ /* 操作結果:依次對L的每個數據元素輸出 */ Status ListTraverse(LinkList L) {LinkList p=L->next;while(p){visit(p->data);p = p->next;}printf("\n");return OK; }創建鏈表
/* 隨機產生n個元素的值,建立帶表頭結點的單鏈線性表L(尾插法) */ void CreateListTail(LinkList *L, int n) {LinkList p,r;int i;srand(time(0)); /* 初始化隨機數種子 */*L = (LinkList)malloc(sizeof(Node)); /* L為整個線性表 */r=*L; /* r為指向尾部的結點 */for (i=0; i < n; i++){p = (Node *)malloc(sizeof(Node)); /* 生成新結點 */p->data = rand()%100+1; /* 隨機生成100以內的數字 */r->next=p; /* 將表尾終端結點的指針指向新結點 */r = p; /* 將當前的新結點定義為表尾終端結點 */}r->next = NULL; /* 表示當前鏈表結束 */ }獲取鏈表中間值
? 獲取方法,search移動的速度是mid的兩倍,search移動到末尾的時候mid剛好能取出鏈表中間值
Status GetMidNode(LinkList L, ElemType *e) {LinkList search, mid;mid = search = L;while (search->next != NULL){//search移動的速度是 mid 的2倍if (search->next->next != NULL){search = search->next->next;mid = mid->next;}else{search = search->next;}}*e = mid->data;return OK; }函數實現
int main() {LinkList L;char opp;ElemType e;InitList(&L);//< 求出初始化之后鏈表的長度,鏈表是從1開始printf("初始化L后:ListLength(L)=%d\n",ListLength(L));printf("\n1.查看鏈表 \n2.創建鏈表(尾插法) \n3.鏈表長度 \n4.中間結點值 \n0.退出 \n請選擇你的操作:\n");while(opp != '0'){scanf("%c",&opp);switch(opp){case '1':ListTraverse(L);printf("\n");break;case '2':CreateListTail(&L,20);printf("整體創建L的元素(尾插法):\n");ListTraverse(L);printf("\n");break;case '3'://clearList(pHead); //清空鏈表printf("ListLength(L)=%d \n",ListLength(L));printf("\n");break;case '4'://GetNthNodeFromBack(L,find,&e);GetMidNode(L, &e);printf("鏈表中間結點的值為:%d\n", e);//ListTraverse(L);printf("\n");break;case '0':exit(0);}} } 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 客座编辑:李建平(1976-),男,博士
- 下一篇: 有环链表监测方法