1. 程式人生 > >單鏈表的建立,插入,刪除,遍歷

單鏈表的建立,插入,刪除,遍歷

  1 #include<stdio.h>
  2 #include<iostream>
  3 #include<malloc.h>
  4 #define OK 1
  5 #define ERROR 0
  6 using namespace std;
  7 typedef struct LNode
  8 {
  9     int data;
 10     struct LNode *next;
 11 } LNode,*LinkList;
 12 
 13 void Init(LinkList &L)///初始化
 14 {
 15     L=new
LNode; 16 L->next=NULL; 17 } 18 void CreatList_R(LinkList &L,int n)///尾插法 建立連結串列 19 { 20 int x; 21 LinkList r,p; 22 L =new LNode; 23 L->next=NULL;//先建立一個帶頭結點的空連結串列 24 r=L;//尾指標r指向頭結點 25 for(int i=1; i<=n; i++) 26 { 27 p=new LNode; 28 scanf("
%d",&x); 29 p->data=x; 30 p->next=NULL; 31 r->next=p;//將新結點*p插入到尾結點*r之後 32 r=p;//r指向新的尾結點*p 33 } 34 } 35 void CreatList_H(LinkList &L,int n)//頭插法 建立連結串列 36 { 37 int x; 38 LinkList P; 39 L=new LNode; 40 L->next=NULL;//先建立一個帶頭結點的空連結串列
41 for(int i=1; i<=n; i++) 42 { 43 scanf("%d",&x); 44 P=new LNode;//生成新節點 45 P->data=x; //輸入元素值賦給新節點*P的資料域 46 P->next=L->next; 47 L->next=P;//將新節點*P插入到頭結點之後 48 } 49 } 50 void outputList(LinkList L)///單鏈表的遍歷 51 { 52 LinkList p; 53 p=L->next ; 54 if(p==NULL) 55 cout<<"該連結串列是空連結串列"<<endl; 56 while(p!=NULL) 57 { 58 cout<<p->data<<" "; 59 p=p->next ; 60 } 61 printf("\n"); 62 } 63 64 int ListInsert(LinkList &L,int i,int e) 65 { 66 ///在帶頭結點的單鏈表L中第i個位置插入值為e的新節點 67 LinkList P,S; 68 P=L; 69 int j=0; 70 while(P&&(j<i-1)) 71 { 72 P=P->next; 73 ++j; 74 } 75 if(!P||j>i-1) 76 return 0; 77 S=new LNode; 78 S->data=e; 79 S->next=P->next; 80 P->next=S; 81 return 1; 82 } 83 int ListDelete(LinkList &L,int i) 84 { 85 ///在帶頭結點的單鏈表L中,刪除第i個元素 86 LinkList P,q; 87 P=L; 88 int j=0; 89 while((P->next)&&(j<(i-1))) 90 { 91 P=P->next; 92 ++j; 93 } 94 if(!(P->next)||(j>i-1)) 95 return 0; 96 q=P->next; 97 P->next=q->next; 98 delete q; 99 return 1; 100 } 101 102 int main() 103 { 104 int n,x,e; 105 LinkList H; 106 Init(H); 107 scanf("%d",&n); 108 CreatList_R(H,n); 109 int In; 110 scanf("%d",&In); 111 while(In--) 112 { 113 scanf("%d %d",&x,&e); 114 if(ListInsert(H,x,e)) 115 outputList(H); 116 else 117 printf("非法插入\n"); 118 } 119 int D; 120 scanf("%d",&D); 121 while(D--) 122 { 123 scanf("%d",&x); 124 if(ListDelete(H,x)) 125 outputList(H); 126 else 127 printf("非法刪除\n"); 128 } 129 return 0; 130 }
樣例輸出: