程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 數據結構之鏈表實現

數據結構之鏈表實現

編輯:C++入門知識

主要包括了鏈表操作中的創建,插入元素、刪除元素,元素定位以及鏈表合並等操作。             [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);   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved