zoukankan      html  css  js  c++  java
  • C语言程序设计

    1. 设计内容

    建立一个动态链表,链表中每一结点包括:学号、姓名、性别、年龄、成绩。程序能实现以下功能:

    • 建立链表
    • 显示链表
    • 查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示"无此记录!"的信息。
    • 删除链表中指定学号的结点。
    • 在链表中指定的位置插入一个新结点(学号不能和其他结点重复)。

        2.  具体代码

      1 #include<stdio.h>
      2 
      3 #include<stdlib.h>
      4 
      5 #include<malloc.h>
      6 
      7 #include<string.h>/*头文件*/
      8 
      9  
     10 
     11  
     12 
     13 struct Node
     14 
     15 {
     16 
     17     char name[20];
     18 
     19     long id;
     20 
     21     char gender[10];
     22 
     23     int age;
     24 
     25     int score;
     26 
     27     struct Node *next;
     28 
     29 };/*创建结构体*/
     30 
     31  
     32 
     33  
     34 
     35 typedef struct Node ListNode;/*声明*/
     36 
     37 ListNode *build(int n) /*创建链表*/
     38 
     39 {
     40 
     41     ListNode *head;
     42 
     43     ListNode *p,*pre;
     44 
     45     int i;
     46 
     47     head=(ListNode *)malloc(sizeof(ListNode));/*为头节点分配内存空间*/
     48 
     49     head->next=NULL;
     50 
     51     pre=head;
     52 
     53     for(i=1;i<=n;i++)/*通过for循环不断加入新的结点*/
     54 
     55     {
     56 
     57         printf("请输入第 %d 个学生的信息:\n",i);
     58 
     59         p=(ListNode *)malloc(sizeof(ListNode));
     60 
     61         printf("请输入姓名:\n");/*输入数据*/
     62 
     63         scanf("%s",&p->name);
     64 
     65         printf("请输入学号:\n");
     66 
     67         scanf("%ld",&p->id);
     68 
     69         printf("请输入性别:\n");
     70 
     71         scanf("%s",&p->gender);
     72 
     73         printf("请输入年龄:\n");
     74 
     75         scanf("%d",&p->age);
     76 
     77         printf("请输入分数:\n");
     78 
     79         scanf("%d",&p->score);
     80 
     81         pre->next=p;
     82 
     83         pre=p;
     84 
     85     }
     86 
     87     p->next=NULL;
     88 
     89     return head;/*返回这个链表的首地址*/
     90 
     91 }
     92 
     93  
     94 
     95 void output(ListNode *h) /*输出链表*/
     96 
     97 {
     98 
     99     ListNode *p;
    100 
    101     if(h==NULL)
    102 
    103         printf("无数据\n");
    104 
    105     else
    106 
    107     {
    108 
    109         p=h->next;
    110 
    111         while(p)
    112 
    113         {
    114 
    115             printf("%s,%ld,%s,%d,%d",p->name,p->id,p->gender,p->age,p->score);
    116 
    117             p=p->next;
    118 
    119             printf("\n");
    120 
    121         }
    122 
    123     }
    124 
    125 }
    126 
    127  
    128 
    129 void Insert(ListNode *h,int n) /*插入链表结点*/
    130 
    131 {
    132 
    133     ListNode *q,*p;
    134 
    135     int j,i;
    136 
    137     printf("插入数据的位置:\n");
    138 
    139     scanf("%d",&i);
    140 
    141     if(i<1 || i>n+1)
    142 
    143         printf("错误,请重新输入.\n");
    144 
    145     else
    146 
    147     {
    148 
    149         j=0;
    150 
    151         p=h;
    152 
    153         while(j<i-1)
    154 
    155         {
    156 
    157             p=p->next;
    158 
    159             j++;
    160 
    161         }
    162 
    163         q=(ListNode *)malloc(sizeof(ListNode));/*为要插入的结点分配内存空间*/
    164 
    165         printf("请输入姓名:\n");/*赋值操作*/
    166 
    167         scanf("%s",&q->name);
    168 
    169         printf("请输入学号:\n");
    170 
    171         scanf("%ld",&q->id);
    172 
    173         printf("请输入性别:\n");
    174 
    175         scanf("%s",&q->gender);
    176 
    177         printf("请输入年龄:\n");
    178 
    179         scanf("%d",&q->age);
    180 
    181         printf("请输入分数:\n");
    182 
    183         scanf("%d",&q->score);
    184 
    185         q->next = p->next; /*调整指针域*/
    186 
    187         p->next=q;
    188 
    189     }
    190 
    191 }
    192 
    193  
    194 
    195 void deletes(ListNode *h,int n) /*函数功能:删除链表结点*/
    196 
    197 {
    198 
    199     ListNode *p,*q;
    200 
    201     int j,i;
    202 
    203     printf("请输入要删除的数据的位置:");
    204 
    205     scanf("%d",&i);
    206 
    207     if(i<1 || i>n)/*如果位置超出了1和n的范围的话则打印出错误信息*/
    208 
    209         printf("错误,请重新输入.\n");
    210 
    211     else
    212 
    213     {
    214 
    215         j=0;
    216 
    217         p=h;
    218 
    219         while(j<i-1)
    220 
    221         {
    222 
    223             p=p->next;
    224 
    225             j++;
    226 
    227         }
    228 
    229         q=p->next;
    230 
    231         p->next=q->next;
    232 
    233         free(q);//释放q指向的结点
    234 
    235         printf("第%d个数据已删除:\n",i);
    236 
    237     }
    238 
    239 }
    240 
    241  
    242 
    243 find(ListNode *h)/*按序号查找链表*/
    244 
    245 {
    246 
    247     int ii,ij;
    248 
    249     printf("请输入要查询的序号:\n");
    250 
    251     scanf("%d",&ii);
    252 
    253     ListNode *p;
    254 
    255     p=h->next;
    256 
    257     if(p==NULL)
    258 
    259         printf("未找到\n");
    260 
    261     else
    262 
    263         ij=1;
    264 
    265     while(p!=NULL&&ij<ii)
    266 
    267     {
    268 
    269         p=p->next;
    270 
    271         ij++;
    272 
    273     }
    274 
    275     if(ii==ij)
    276 
    277         output(p);
    278 
    279     else
    280 
    281         printf("未找到:\n");
    282 
    283 }
    284 
    285  
    286 
    287  
    288 
    289 void txtleletters() /*主标题*/
    290 
    291 {
    292 
    293     printf("1.建立 \n");
    294 
    295     printf("2.显示 \n");
    296 
    297     printf("3.查找 \n");
    298 
    299     printf("4.插入 \n");
    300 
    301     printf("5.删除 \n");
    302 
    303     printf("6.退出 \n");
    304 
    305     printf("请输入要选择功能的序号:");
    306 
    307 }
    308 
    309  
    310 
    311  
    312 
    313  
    314 
    315 void main() /*主函数*/
    316 
    317 {
    318 
    319     ListNode *h;
    320 
    321     ListNode *f;
    322 
    323     h=NULL;
    324 
    325     int i, n;
    326 
    327     txtleletters();
    328 
    329     while (1)
    330 
    331     {
    332 
    333         printf("\n");
    334 
    335         scanf("%d",&i);
    336 
    337         switch(i)
    338 
    339         {
    340 
    341         case 1:
    342 
    343             printf("请输入创建链表节点的个数:\n"); /*输入创建链表结点的个数*/
    344 
    345             scanf("%d",&n);
    346 
    347             h=build(n);
    348 
    349             printf("现有成员的信息:\n");
    350 
    351             output(h);
    352 
    353             txtleletters();
    354 
    355             break;
    356 
    357         case 2:
    358 
    359             printf("现有成员信息: \n");
    360 
    361             output(h);
    362 
    363             txtleletters();
    364 
    365             break;
    366 
    367         case 3:
    368 
    369 find(h);
    370 
    371             txtleletters();
    372 
    373             break;
    374 
    375         case 4:
    376 
    377             Insert(h,n);
    378 
    379             printf("现有成员信息:\n");
    380 
    381             output(h);
    382 
    383             txtleletters();    
    384 
    385             break;
    386 
    387         case 5:
    388 
    389             deletes(h,n);
    390 
    391             printf("现有成员信息: \n");
    392 
    393             output(h);
    394 
    395             txtleletters();
    396 
    397             break;
    398 
    399         case 6:
    400 
    401             return;
    402 
    403             break;
    404 
    405         default:
    406 
    407             printf("错误的选项,请重新选择:\n");
    408 
    409         }
    410 
    411     }
    412 
    413 }
  • 相关阅读:
    JQuery 入门学习附常用UI模块
    通过rsync+inotify实现数据实时备份同步
    JS DOM操作
    Django 模型
    Mysql进阶(二)
    python小demo-01: 线程池+多进程实现cpu密集型操作
    (转)flask的context机制
    (转)pythonC3线性算法
    python中的functools模块
    centos7+mysql5.7.11实现主从复制
  • 原文地址:https://www.cnblogs.com/shandianlongxiao/p/4025088.html
Copyright © 2011-2022 走看看