Data structure - single chain table
Initlist (LinkList & L) parameter: single chain table l function: initialization time complexity O(1)
ListLength(LinkList L) parameter: single chain table l function: time complexity of obtaining single chain table length O(n)
Listinsert (LinkList & L, int i, ElemType e) parameters: single chain table L, location I, element e functions: location I post time complexity O(n) [add lookup]
If the pointer p is known, insert O(1)
ListDelete (LinkList & L, int i) parameter: single chain table L, location I function: delete location I element time complexity O(n) [add lookup]
If the deletion of p pointer is known, it is better to O(1), because the data field can be exchanged with the successor node, and then the successor node can be deleted.
The worst is O(n), which is to find the node before p from the beginning, and then delete the node indicated by p
LocateElem(LinkList L,ElemType e) parameter: single chain table L, element E function: find the first element equal to e, return pointer time complexity O(n)
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> using namespace std; #define Status int #define ElemType int //Single link table node data structure typedef struct LNode { ElemType data;//Data domain struct LNode *next;//Pointer domain } LNode,*LinkList; //**************************Basic operation function***************************// //Initialization function Status InitList(LinkList &L) { L = new LNode;//Generate the header node so that the deletion and other operations do not have to be divided into the first node and others L->next = NULL; return 1; } //There is no data in the header node to obtain the length of single chain table int ListLength(LinkList L) { LinkList p=L; int sum=0; while(p) { sum++; p=p->next; } return sum-1;//Remove the head node } //Insert function -- post insert into position I (1 < = I < = length + 1), i.e. position I need not be distinguished after i-1 bool ListInsert(LinkList &L,int i,ElemType e) { LNode* s; LinkList p=L; int j=0; while(p&&(j<i-1))//j refers to the position i-1 or p has jumped out at the end { p=p->next; ++j; } if(!p||j>i-1)//When I < 1 or I > ListLength (L) + 1, if the insertion position is invalid, ListLength will not be called to improve efficiency { printf("Invalid insertion position!!!\n"); return false; } s=new LNode; s->data=e; s->next=p->next; p->next=s; return true; } //Delete function delete node at position I, i.e. delete node after i-1 bool ListDelete(LinkList &L,int i) { LNode* s; LinkList p=L; int j=0; LinkList q; while(p&&(j<i-1))//j refers to position i-1 { p=p->next; ++j; } if(!(p->next)||j>i-1)//Invalid delete position when i<1 or i>ListLength (L) { printf("Invalid delete location!!!\n"); return false; } q=p->next; p->next=q->next; free(q);//Release space return true; } //The search function finds the first node equal to e by value and returns the node pointer, otherwise NULL LNode *LocateElem(LinkList L,ElemType e) { LNode *p=L; while(p&&(p->data!=e)) { p=p->next; } return p; } //**************************Function implementation function**************************// //Ergodic output function void PrintList(LinkList L) { LinkList p=L->next;//Jump over node if(ListLength(L)) { printf("All elements of the current single chain table:"); while(p) { printf("%d ",p->data); p=p->next; } printf("\n"); } else { printf("Current single chain table is empty!\n"); } } //Insert function call ListInsert to insert void Insert(LinkList &L) { int place; ElemType e; bool flag; printf("Please enter the location to insert(Starting from 1)And elements:\n"); scanf("%d%d",&place,&e); flag=ListInsert(L,place,e); if(flag) { printf("Insert successfully!!!\n"); PrintList(L); } } //Delete function call ListDelete delete void Delete(LinkList L) { int place; bool flag; printf("Please enter the location to delete(Starting from 1):\n"); scanf("%d",&place); flag=ListDelete(L,place); if(flag) { printf("Delete successfully!!!\n"); PrintList(L); } } //Find function call LocateElem to find void Search(LinkList L) { ElemType e; LNode *q; printf("Please enter the value to find:\n"); scanf("%d",&e); q=LocateElem(L,e); if(q) { printf("Find the element!\n"); } else printf("Element not found!\n"); } //menu void menu() { printf("********1.Post interpolation Two.delete*********\n"); printf("********3.lookup Four.output*********\n"); printf("********5.Sign out *********\n"); } //Main function int main() { LinkList L; int choice; InitList(L); while(1) { menu(); printf("Please enter the menu number:\n"); scanf("%d",&choice); if(choice==5) break; switch(choice) { case 1: Insert(L); break; case 2: Delete(L); break; case 3: Search(L); break; case 4: PrintList(L); break; default: printf("Input error!!!\n"); } } return 0; }