zoukankan      html  css  js  c++  java
  • 数据结构作业第二章题解

    下面给出了完整的实现

    #include<iostream>
    #include<iomanip>
    using namespace std;
    
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
    typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型
    
    typedef struct LNode {
       ElemType data; //结点的数据域
       struct LNode *next; //结点的指针域
    } LNode, *LinkList; //LinkList为指向结构体LNode的指针类型
    
    void CreateList_R(LinkList &L, int n) //算法2.12 后插法创建单链表
    {
       LinkList p, r;
       int i;
    
       L = new LNode;
       L->next = NULL; //先建立一个带头结点的空链表
       r = L; //尾指针r指向头结点
       for(i = 0; i < n; i++) {
          p = new LNode;//生成新结点
          cin >> p->data;
          p->next = NULL;
          r->next = p;//将新结点*p插入尾结点*r之后
          r = p;//r指向新的尾结点*p
       }
    }
    
    //将A分成小于0的B表和大于0的C表,删除A表中大于0的组成C表
    void DisCompose(LinkList &A, LinkList &B, LinkList &C)
    {
       LNode *prev, *cur, *ctail;
    
       prev = B = A;
       cur = A->next;
       ctail = C = new LNode; //为C申请头结点空间
    
       while(cur != NULL) {
          if(cur->data > 0) { //加入C表
             prev -> next = cur->next;
             ctail->next = cur; //插入C表尾部
             ctail = cur;
             cur = prev->next;
          }
          else{
             prev = cur;
             cur = cur->next;
          }
       }
       ctail->next = NULL;
    }
    
    void display(LinkList L)
    {
       LNode *p = L->next;
       while(p) {
          cout << setw(5) << p->data;
          p = p->next;
       }
       cout << endl;
    }
    
    LNode *Max(LinkList L)
    {
       LNode *pmax, *p;
       pmax = p = L->next;
       while(p != NULL) {//如果下一个结点存在
          if(p->data > pmax->data)
             pmax = p; //如果p的值大于pmax的值,则重新赋值
          p = p->next; //遍历链表
       }
       return pmax;
    }
    
    void  inverse(LinkList &L)
    {
       LNode *p, *q;
       // 逆置带头结点的单链表 L
       p = L->next;
       L->next = NULL;
       while(p) {
          q = p->next;  // q指向*p的后继
          p->next = L->next;
          L->next = p;     // *p插入在头结点之后
          p = q;
       }
    }
    
    //return length of A
    int  Delete(ElemType A[ ], int  n, ElemType item)
    {
       int i, cur;
       cur = 0;
       for(i = 0; i < n; i++){
          if(A[i] != item )
             A[cur++] = A[i];
       }
       return cur;
    }
    int main()
    {  // -5 8 -3 6  -1 7
       LinkList L, B, C;
    
       CreateList_R(L, 6);
       display(L);
       LNode *p = Max(L);
       if(p)
          cout << p->data << endl;
       inverse(L);
       display(L);
    
       DisCompose(L, B, C);
       display(B);
       display(C);
    
       ElemType A[10] = {1, 3, 3, 200, 3, 3,-1,3,3,3};
       int len = Delete(A, 10, 3);
       for(int i = 0; i < len; i++)
          cout << setw(5) << A[i];
       cout << endl;
       return 0;
    }
  • 相关阅读:
    mysql 中 group_concat()用法
    MySQL行转列与列转行
    mysql中find_in_set()函数的使用(转载)
    多线程中的线程安全关键字
    架构师的特征
    算法复杂度的定义
    1.ArrayList和linkedList区别
    Plsql查询clob类型字段数据
    数据库的特性与隔离级别和spring事务的传播机制和隔离级别
    java中的线程
  • 原文地址:https://www.cnblogs.com/4bytes/p/9082373.html
Copyright © 2011-2022 走看看