1 #include<stdio.h> 2 #include <stdlib.h> 3 #include<malloc.h> 4 #define OK 1 5 #define ERROR 0 6 #define ElemType int 7 typedef int Status; 8 typedef struct LNode 9 { 10 int data; 11 struct LNode *next; 12 }LNode,*LinkList; 13 Status InitList(LinkList &L){ 14 L=new LNode; 15 L->next=NULL; 16 return OK; 17 } 18 void CreateList_H(LinkList &L, int n) { //头插法创建链表,最先创建的元素为链表尾 19 L=new LNode; 20 LinkList p; 21 L->next=NULL; 22 for(int i=0;i<n;++i){ 23 p=new LNode; 24 scanf("%d",&p->data); 25 p->next=L->next; 26 L->next=p; 27 } 28 } 29 void CreateList_R(LinkList &L, int n) { 30 L=new LNode; 31 LinkList p,r; 32 L->next=NULL; 33 r=L; 34 for(int i=0;i<n;++i){ 35 p=new LNode; 36 scanf("%d",&p->data); 37 p->next=NULL; 38 r->next=p; 39 } 40 } 41 Status GetElem(LinkList L,int i,ElemType &e) 42 { 43 LinkList p=L; 44 p=L->next; 45 int j=1; 46 while(p&&j<1) 47 { 48 p=p->next; 49 ++j; 50 } 51 if(!p||j>i) return ERROR; 52 e=p->data; 53 return OK; 54 } 55 LNode *LocateElem(LinkList L,ElemType e) 56 { 57 LinkList p; 58 p=L->next; 59 while(p&&p->data!=e) 60 p=p->next; 61 return p; 62 } 63 Status ListInsert(LinkList &L,int i,ElemType e) 64 { 65 LinkList p,s; 66 p=L; 67 int j=0; 68 while(p&&(j<i-1)) 69 { 70 p=p->next; 71 ++j; 72 } 73 if(!p||j>j-1) return ERROR; 74 s=new LNode; 75 s->data=e; 76 s->next=p->next; 77 p->next=s; 78 return OK; 79 } 80 Status ListDelete(LinkList &L,int i) 81 { 82 LinkList p,q; 83 p=L; 84 int j=0; 85 while((p->next)&&(j<i-1)) 86 { 87 p=p->next; 88 ++j; 89 } 90 if(!(p->next)||j>i-1) return ERROR; 91 q=p->next; 92 p->next=q->next; 93 delete q; 94 return OK; 95 } 96 void print(LinkList &L) 97 { 98 LinkList p=L->next; 99 while(p) 100 { 101 printf("%d ",p->data); 102 p=p->next; 103 } 104 printf(" "); 105 } 106 int main(){ 107 LinkList list; 108 LNode s; 109 int n,m,i; 110 InitList(list); 111 printf(" 1.前插法 2.后插法 "); 112 scanf("%d",&i); 113 if(i==1) 114 { 115 printf("创建链表个数为:"); 116 scanf("%d",&n); 117 printf("使用前插法创建链表为:"); 118 CreateList_H(list,n); 119 print(list); 120 } 121 if(i==2) 122 { 123 printf("创建链表个数为:"); 124 scanf("%d",&n); 125 printf("使用后插法创建链表为:"); 126 CreateList_R(list,n); 127 print(list); 128 } 129 ListInsert(list,3,9); 130 printf("在第3个位置插入9后链表为:"); 131 print(list); 132 ListDelete(list,1); 133 printf("删除第1个结点后链表为:"); 134 print(list); 135 GetElem(list,1,m); 136 printf("查询出第1个值为:%d ",m); 137 s=*LocateElem(list,3); 138 printf("查询出值为3的结点:%d",s); 139 }