主要包括了鏈表操作中的創建,插入元素、刪除元素,元素定位以及鏈表合並等操作。 [cpp] // LinkList.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "iostream" #include "stdlib.h" #include "stdio.h" using namespace std; typedef int DataType; // 定義鏈表中的結點 typedef struct LNode { DataType data; struct LNode *next; }LNode, *LinkList; void CreateList(LinkList &L,int n); void PrintLinkList(LinkList &L); int GetElem(LinkList L, int i, DataType &e); int ListInsert(LinkList &L,int i, DataType e); int ListDelete(LinkList &L, int i, DataType &e); void MergeList(LinkList &La, LinkList &Lb, LinkList &Lc); int _tmain(int argc, _TCHAR* argv[]) { // 創建一個指定長度的鏈表 int LinkListLength=6; LinkList L; CreateList(L,LinkListLength); // 輸出鏈表 PrintLinkList(L); // 查找第3個元素 int tobefound=0; GetElem(L,3,tobefound); printf("\ntobefound=%d\n",tobefound); // 在指定位置插入一個新的結點 ListInsert(L,3,10); // 輸出鏈表 printf("new node is inserted:\n"); PrintLinkList(L); // 刪除一個指定位置的鏈表結點 int e; ListDelete(L,4,e); // 輸出鏈表 printf("\none node is deleted:\n"); PrintLinkList(L); // 創建新的鏈表 printf("\ninput 3 new nodes of new list\n"); LinkList L2; CreateList(L2,3); PrintLinkList(L2); // 合並兩個鏈表 LinkList L3; MergeList(L,L2,L3); printf("\nMerged lists:\n"); PrintLinkList(L3); // getchar(); getchar(); return 0; } // 創建長度為n的鏈表 void CreateList(LinkList &L,int n) { // L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; printf("please input n link nodes \n"); for(int i=n;i>0;--i) { LNode *p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data); // 在鏈表頭部插入新的結點 p->next=L->next; L->next=p; } } // 輸出鏈表中結點 void PrintLinkList(LinkList &L) { printf("all list nodes is : \n"); LinkList p=L->next;// 指向第一個結點 while(p!=NULL) { printf("%5d",p->data); p=p->next; } } // 查找鏈表元素,查找第i個元素 int GetElem(LinkList L, int i, DataType &e) { // LinkList p=L->next;// 指向第一個元素 int j=1; while(p&&j<i) { // p=p->next; j++; } if(!p||j>i) return -1; // 沒有查找到 e=p->data; return 1; // 表示查找到 } // 在第i個結點之前插入元素e int ListInsert(LinkList &L,int i, DataType e) { LinkList p=L; int j=0; while(p&&j<i-1) { p=p->next; ++j; } // 直到p指向i-1 if(!p||j>i-1) return -1; LinkList s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; } // 刪除指定位置的結點,刪除第i個結點 int ListDelete(LinkList &L, int i, DataType &e) { // LinkList p=L; // 指向頭結點 int j=0; while(p->next&&j<i-1) { p=p->next; j++; } if(!(p->next)||j>i-1) return -1; LinkList q=p->next; // 指向被刪除的結點 p->next=q->next; e=q->data; free(q); } // 合並兩個鏈表 void MergeList(LinkList &La, LinkList &Lb, LinkList &Lc) { LinkList pa=La->next; //指向第一個元素 LinkList pb=Lb->next; //指向第一個元素 LinkList pc=La; // 以La鏈表的頭結點為合並後的鏈表的頭結點 Lc=pc; while(pa&&pb) { if(pa->data<=pb->data) { pc->next=pa; pc=pa; pa=pa->next; } www.2cto.com else { pc->next=pb; pc=pb; pb=pb->next; } } pc->next=pa?pa:pb; free(Lb); }