4月15日 单链表(未完成)

时间:2019-04-15
本文章向大家介绍4月15日 单链表(未完成),主要包括4月15日 单链表(未完成)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
  1 #include"stdio.h"
  2 #include"stdlib.h"
  3 typedef int DataType;
  4 typedef struct node 
  5 {
  6     DataType data; 
  7     struct node *next;
  8 }LinkNode,*LinkList;
  9 int count; 
 10 LinkList L; 
 11 LinkList initList(LinkList &L)
 12 {
 13     L = (LinkNode*)malloc(sizeof(LinkNode));
 14     L->next = NULL;
 15     return L;
 16 }
 17 void creatList(LinkList &L , int flag) 
 18 {    
 19     int number; 
 20     printf("请输入第%d个元素:",count+1); 
 21     scanf("%d",&number);
 22 
 23     if(number == flag)
 24     {
 25         L = NULL; 
 26     }
 27     else 
 28     {     
 29         L = (LinkNode*)malloc(sizeof(LinkNode));
 30         L->data = number ;
 31         count++; 
 32         creatList(L->next , flag); 
 33     }
 34 }
 35 LinkNode *locate(LinkList &L , int i)
 36 {
 37     int count = 0; 
 38     LinkNode *p = L;
 39     while(p != NULL && count < i-1)
 40     {
 41         count++; 
 42         p = p->next; 
 43     } 
 44     if(p == NULL)
 45     {
 46         printf("该链表中没有该元素"); 
 47         return p; 
 48     }
 49     else
 50     {
 51         return p; 
 52     } 
 53      
 54 } 
 55 //目前该函数还有bug 还需要改进 
 56 void instNode(LinkList &L , int i , int x) 
 57 {
 58     if(i<1||i>count)
 59     {
 60         printf("输入错误 不能插入!"); 
 61         return ; 
 62     }    
 63     LinkNode *newNode = (LinkNode*)malloc(sizeof(LinkNode));
 64     if(i == 1)
 65     {
 66         LinkNode *p = locate(L->next , i);
 67         newNode->data = x; 
 68         newNode->next = p; 
 69         L->next = newNode; 
 70     } 
 71     else
 72     {
 73         LinkNode *p = locate(L->next , i-1);//p指向第i-1个节点 
 74         LinkNode *q = p->next;//q指向的p的下一个节点 就是第i个节点
 75         newNode->data = x;
 76         p->next = newNode;
 77         newNode->next = q; 
 78         count++; 
 79         printf("插入成功!\n"); 
 80     } 
 81 }
 82 void show(LinkList &L)
 83 {
 84     int count = 0; 
 85     LinkNode *p = L;
 86     while(p != NULL)
 87     {
 88         count++; 
 89         printf("第%d个元素为:%d\n",count , p->data);
 90         p = p->next; 
 91     }
 92 }
 93 void prompt() 
 94 {
 95     printf("请输入1-5\n");
 96     printf("1.初始化链表\n");
 97     printf("2.创建链表\n");
 98     printf("3.定位元素\n"); 
 99     printf("4.插入一个元素\n");
100     printf("5.输出所有元素\n"); 
101 } 
102 void menu()
103 {    
104     int flag; 
105     LinkNode *p = L;
106     int i; 
107     int x; 
108     int n;
109     system("cls");  
110     prompt(); 
111     scanf("%d",&n);
112     switch(n)
113     {
114         case 1: 
115             system("cls"); 
116             initList(L);
117             printf("初始化成功!\n");
118             system("pause");
119             menu();
120             break; 
121         case 2:
122             system("cls"); 
123             printf("请输入您需要使用什么数字结束输入:"); 
124             scanf("%d",&flag); //定义输入结束符 
125             creatList(p->next , flag); 
126             system("cls"); 
127             printf("创建成功!\n"); 
128             system("pause");
129             menu();
130             break; 
131         case 3: 
132             system("cls");
133             printf("请输入您需要定位的元素的序号:");
134             scanf("%d",&i);
135             printf("该元素地址为:%d\n",locate(L->next , i)); 
136             system("pause");
137             system("cls"); 
138             system("pause");
139             menu();
140             break; 
141         case 4: 
142             system("cls");
143             printf("请输入您需要插入的位置和数值:");
144             scanf("%d %d",&i , &x);
145             instNode(L->next , i , x);
146             system("pause");
147             system("cls"); 
148             menu();
149             break; 
150         case 5:
151             system("cls");
152             show(L->next); 
153             system("pause");
154             system("cls"); 
155             menu();
156             break; 
157     } 
158 } 
159 main()
160 {
161     menu(); 
162 }