data structure test

來源:互聯網
上載者:User

1、設計演算法,對帶頭結點的單鏈表實現就地逆置。並給出單鏈表的儲存結構(資料類型)的定義。

#include <iostream>#include <cstdlib>#include <cstdio>#include <ctime>using namespace std;typedef char ElemType;typedef struct Node{ElemType data;struct Node *next;}Node, *LinkList;LinkList CreateList(){LinkList L;ElemType c;L = (LinkList)malloc(sizeof(Node));L->next = NULL;Node *p , *tail;tail = L;c = getchar();while(c != '#'){p = (Node *)malloc(sizeof(Node));p->data = c;tail->next = p;tail = p;c = getchar();}tail->next = NULL;return L;}void ShowList(LinkList L){Node *p;p = L->next;while(p != NULL){cout << p->data << " ";p = p->next;}cout << endl;}void ReverseList(LinkList L){Node *p, *q;p = L->next;L->next = NULL;while(p != NULL){q = p->next;p->next = L->next;L->next = p;p = q;}}int main(){LinkList L;L = CreateList();ShowList(L);ReverseList(L);ShowList(L);return 0;}

2、編寫遞迴演算法,將二叉樹中所有結點的左、右子樹相互交換。並給出演算法中使用的二叉樹的儲存結構(資料類型)的定義。

typedef struct BiNode{char data;struct BiNode *left;struct BiNode *right;}BiNode, *BiTree;

BiNode* Exchange(BiNode* T){ BiNode* p; if(NULL==T || (NULL==T->lchild && NULL==T->rchild))  return T; p = T->lchild; T->lchild = T->rchild; T->rchild = p; if(T->lchild) {  T->lchild = Exchange(T->lchild); } if(T->rchild) {  T->rchild = Exchange(T->rchild); } return T;}

3、折半尋找演算法。

#include<iostream>#include<cstdio>using namespace std;int search(int *array, int n, int target){    int low = 0;    int high = n - 1;    if( low > high ) return -1;    while( low <= high )    {           int mid = low + ( high - low ) / 2;           if( array[mid] < target ) low = mid + 1;           else if( array[mid] > target ) high = mid - 1;           else return mid;    }}int main(){    int a[] = {1,2,3,4,5,6,7,8,9};    cout<<search(a,9,4)<<endl;return 0;}           

4、資料結構課本P74,習題2、13

void DeleteNode( ListNode *s)    {//刪除單迴圈鏈表中指定結點的直接前趨結點      ListNode *p, *q;      p=s;      while( p->next->next!=s)        p=p->next;      //刪除結點      q=p->next;      p->next=q->next;      free(p); //釋放空間    }

5、統計葉子結點數。P168

#include<iostream>#include<queue>#include <cstdlib>#include <cstdio>using namespace std;typedef struct BiNode{char data;struct BiNode *left;struct BiNode *right;}BiNode, *BiTree;int sum = 0;void CreateBinaryTree(BiTree &T)//二叉樹建立   abc,,de,g,,f,,,{//T = (BiNode*) malloc (sizeof(BiNode));T = new BiNode;cin >> T->data;if(T->data == ',') {T = NULL; }if(T != NULL){CreateBinaryTree(T->left);CreateBinaryTree(T->right);}}void PreOrder(BiTree T)//前序走訪{if(T != NULL){cout << T->data;PreOrder(T->left);PreOrder(T->right);}}void InOrder(BiTree T)//中序遍曆{if(T != NULL){InOrder(T->left);cout << T->data;InOrder(T->right);}}void PostOrder(BiTree T)//後序遍曆{if(T != NULL){PostOrder(T->left);PostOrder(T->right);cout << T->data;}}void LevOrder(BiTree T)//層次遍曆{if(T != NULL){BiTree p = T;queue<BiTree>que;que.push(p);while(!que.empty()){p = que.front();cout << p->data;que.pop();if(p->left != NULL){que.push(p->left);}if(p->right != NULL){que.push(p->right);}}}}int Size(BiTree T)//計算二叉樹節點數{if(T != NULL){if(T->left == NULL && T->right == NULL){sum++;}Size(T->left);Size(T->right);}return sum;}int Deep(BiTree T)//計算二叉樹深度{int m, n;if(T == NULL) return 0;m = Deep(T->left);n = Deep(T->right);if(m > n) return m + 1;else return n + 1;}int main(void){BiTree T;CreateBinaryTree(T);cout << "前序走訪結果為:" << endl;PreOrder(T);cout << endl << endl;cout << "中序遍曆結果為:" << endl;InOrder(T);cout << endl << endl;cout << "後序遍曆結果為:" << endl;PostOrder(T);cout << endl << endl;cout<<"層次遍曆結果為:"<<endl;LevOrder(T);cout << endl << endl;cout << "二叉樹分葉節點個數為:" << Size(T)<<endl;cout << "二叉樹深度數為:" << Deep(T) << endl;system("pause");return 0;}

6、順序表的合并。

#define MAXSIZE 100typedef int ElemType;typedef struct SeqList{ElemType elem[MAXSIZE];int last;}SeqList;void mergeList(SeqList *LA, SeqList * LB, SeqList *LC){int i, j, k;i = j = k = 0;while (i <= LA->last && j <= LB->last){if (LA->elem[i] <= LB->elem[j]){LC->elem[k++] = LA->elem[i++];}else{LC->elem[k++] = LB->elem[i++];}}while (i <= LA->last){LC->elem[k++] = LA->elem[i++];}while (j <= LB->last){LC->elem[k++] = LB->elem[j++];}LC->last = LA->last + LB->last + 1;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.