1 #include <stdio.h> 2 #include "malloc.h" 3 #include "stdlib.h" 4 #define OK 1 5 #define ERROR 0 6 typedef int Status; 7 typedef int ElemType; 8 typedef struct LNode 9 { 10 int data; 11 struct LNode *next; 12 }LNode,*LinkList; 13 14 //尾插法添加数据 15 LinkList CreateList_L(LinkList &L) 16 { 17 L=(LinkList)malloc(sizeof(LNode)); 18 L->next=NULL; 19 LinkList s=(LinkList)malloc(sizeof(LNode)); 20 s=L; 21 22 printf("建立单链表,输入元素个数:"); 23 int n; 24 scanf("%d",&n); 25 printf("输入元素:"); 26 for(int i=0;i<n;i++) 27 { 28 LinkList p=(LinkList)malloc(sizeof(LNode)); 29 scanf("%d",&p->data); 30 s->next=p; 31 s=p; 32 s->next=NULL; 33 } 34 } 35 36 Status ListInsert_L(LinkList &L,int i,ElemType e) 37 { 38 LNode *p; int j; 39 p=L;j=0; 40 while(p&&j<i-1) 41 { 42 p=p->next; 43 ++j; 44 } 45 if(!p||j>i-1) 46 return ERROR; 47 LinkList s=(LinkList)malloc(sizeof(LNode)); 48 s->data=e; 49 s->next=p->next; 50 p->next=s; 51 return OK; 52 } 53 54 55 Status ListDelete_L(LinkList &L,int i) 56 { 57 LNode *p,*q; 58 int j,e; 59 p=L;j=0; 60 while(p->next&&j<i-1) 61 { 62 p=p->next;++j; 63 } 64 if(!(p->next)||j>i-1) 65 return ERROR; 66 q=p->next; 67 p->next=q->next; 68 e=q->data;free(q); 69 return OK; 70 } 71 72 Status LocateElem_L(LinkList &L,ElemType e) 73 { 74 int n=0;int x; 75 LNode *q,*p; 76 *q=*p; 77 while(q!=0l&&q->data!=x) 78 { 79 q=q->next; 80 n++; 81 } 82 if(q==0) 83 return(-1); 84 else 85 return(n+1); 86 } 87 88 int main() 89 { 90 int i,k,C;ElemType value; 91 LinkList L;//定义头指针; 92 do 93 { 94 printf("\n----------------------------------------\n"); 95 printf("1.创建单链表\n"); 96 printf("2.在i位置插入元素value\n"); 97 printf("3.删除第i各元素\n"); 98 printf("4.查找值为C的元素\n"); 99 printf("0.退出\n"); 100 printf("请输入您的选择(1,2,3,4,0)\n"); 101 printf("----------------------------------------\n"); 102 scanf("%d",&k); 103 switch(k) 104 { 105 case 1: 106 { 107 108 L=CreateList_L(L); 109 110 } 111 break; 112 case 2: 113 { 114 printf("请输入要插入的位置及元素:i,value\n"); 115 scanf("%d,%d",&i,&value); 116 ListInsert_L(L,i,value); 117 /*ListOut(L);*/ 118 } 119 break; 120 case 3: 121 { 122 123 printf("\n"); 124 printf("请输入i的值:\n"); 125 scanf("%d",&i); 126 ListDelete_L(L,i); 127 128 } 129 break; 130 case 4: 131 { 132 /*ListOut(L);*/ 133 printf("请输入要查找的元素值:\n"); 134 scanf("%d",&value); 135 LocateElem_L(L,value); 136 } 137 break; 138 case 0:break; 139 default:printf("输入有误!请重新输入!"); 140 } 141 }while(k!=0); 142 }