美文网首页
上机实验(01次)

上机实验(01次)

作者: crabor | 来源:发表于2018-04-16 20:51 被阅读0次

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct stuInfo {
  char stuName[10]; /*学生姓名*/
  int Age;          /*年龄*/
} ElemType;

typedef struct node {
  ElemType data;
  struct node *next;
} ListNode, *ListPtr;

ListPtr List_Init();
void List_Insert(ListPtr h, ElemType x, char ch);
void List_Destroy(ListPtr h);
ListPtr List_Merge(ListPtr La, ListPtr Lb);
void OutPut(ListPtr La);

ListPtr List_Init() {
  ListPtr p;
  p = (ListPtr)malloc(sizeof(ListNode));
  if (p == NULL) {
    exit(0);
  };
  p->next = NULL;
  return p;
}

void List_Destroy(ListPtr h) {
  ListPtr cur = h->next;
  for (; cur != NULL; h = cur, cur = cur->next) {
    free(h);
  }
  free(h);
  h = NULL;
}

void List_Insert(ListPtr h, ElemType x, char ch) {//ch为'<'则是按从小到大顺序插,'>'则相反
  ListPtr newNode, pre, cur;

  newNode = (ListPtr)malloc(sizeof(ListNode));
  if (newNode == NULL) {
    exit(0);
    ;
  }
  newNode->data.Age = x.Age;
  strcpy(newNode->data.stuName, x.stuName);
  pre = h;
  cur = h->next;

  if (ch == '>') {
    for (; cur != NULL && newNode->data.Age < cur->data.Age;
         pre = cur, cur = cur->next)
      ;
  } else if (ch == '<') {
    for (; cur != NULL && newNode->data.Age > cur->data.Age;
         pre = cur, cur = cur->next)
      ;
  }
  else{
    return;
  }

  if (cur == NULL) {
    pre->next = newNode;
    newNode->next = cur;
    return;
  }
  if (newNode->data.Age == cur->data.Age) {//删去相同信息的项
    if (strcmp(newNode->data.stuName, cur->data.stuName) == 0) {
      return;
    }
  }
  pre->next = newNode;
  newNode->next = cur;
}

ListPtr List_Merge(ListPtr La, ListPtr Lb) {
  ListPtr Lc, p;
  Lc = List_Init();
  for (p = La->next; p != NULL; p = p->next) {
    List_Insert(Lc, p->data, '>');
  }
  for (p = Lb->next; p != NULL; p = p->next) {
    List_Insert(Lc, p->data, '>');
  }
  return Lc;
}

void OutPut(ListPtr La) {
  ListPtr p;
  p = La->next;
  printf("Name\tAge\n");
  while (p != NULL) {
    printf("%s\t%d\n", p->data.stuName, p->data.Age);
    p = p->next;
  }
  printf("\n");
}

int main(void) {
  ListPtr pHeadA, pHeadB, pHeadC;
  FILE *inFile;
  ElemType stu;
  pHeadA = List_Init();
  pHeadB = List_Init();
  inFile = fopen("StuInfoA.txt", "r");
  if (inFile == NULL) {
    return 1;
  }

  while (!feof(inFile)) {
    fscanf(inFile, "%s\t%d", stu.stuName, &stu.Age);
    List_Insert(pHeadA, stu, '<');
    fgetc(inFile);
  }

  inFile = fopen("StuInfoB.txt", "r");
  if (inFile == NULL) {
    return 1;
  }
  while (!feof(inFile)) {
    fscanf(inFile, "%s\t%d", stu.stuName, &stu.Age);
    List_Insert(pHeadB, stu, '<');
    fgetc(inFile);
  }

  fclose(inFile);

  pHeadC = List_Merge(pHeadA, pHeadB);
  if (pHeadC == NULL) {
    return 1;
  };
  printf("ListA\n");
  OutPut(pHeadA);
  printf("ListB\n");
  OutPut(pHeadB);
  printf("ListC\n");
  OutPut(pHeadC);
  List_Destroy(pHeadA);
  List_Destroy(pHeadB);
  List_Destroy(pHeadC);
  getchar();
  return 0;
}

文本

  • StuInfoA.txt
fghfg  45
bhkjh  98
dsfjgh  12
dfg  5
dfgrdg 77
fdgsdf 9
  • StuInfoB.txt
ftujh 87
wouero 9
dfg  5
wtwu  8
vbvxcv 66
dsfghk  18

相关文章

  • 2019-10-28

    算法的上机实验

  • MATLAB上机实验

    《几何与代数》数学实验报告完全攻略 标签: 东南大学 15-16-2 MATLAB上机实验 实验一 利用MATLA...

  • 上机实验(02次)

    代码 sorry,之前写的有bug。现在的已经完全没有bug了。 text.txt 运行结果

  • 上机实验(04次)

    最小生成树和Kruskal算法 源代码 cat.txt 运行结果

  • 上机实验(03次)

    快速排序与折半查找 readme 关于本程序中的EOF说明:由于程序包含标准输入,以EOF结束循环。win下EOF...

  • 上机实验(01次)

    代码 文本 StuInfoA.txt StuInfoB.txt

  • 2018-04-17

    今天早上上机自己做完了vc➕➕的实验报告

  • 7.31

    实验室——质控上机组 终于终于终于历经九九八十一个关卡,来到最后一步啦,质控上机主要由质控、Pooling、上机三...

  • 总结

    实验室——质控上机组 终于终于终于历经九九八十一个关卡,来到最后一步啦,质控上机主要由质控、Pooling、上机三...

  • 2019-10-18

    今天搜了一下明天上机的实验代码

网友评论

      本文标题:上机实验(01次)

      本文链接:https://www.haomeiwen.com/subject/icqykftx.html