Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions 2017-1/Cloud/1.线性表的基本操作/LinkList.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#include "LinkList.h"

/* �����ı��� */
void TraverseList(LinkList p) {
LinkList l = p;
l = l->next;
while ( l != p) {
printf("%d ",l->data);
l = l->next;
}
printf("\n");
}

/* �������� */
LinkList CreatList( int n) {
LNode *L,* p;
int i;
L = (LinkList)malloc(sizeof(LNode));
L->next = L;
L->data = n;
if (!L)
exit(1);
for (i = 0; i < n ; i++) {
p = (LinkList)malloc(sizeof(LNode));
if (!p)
exit(1);
p->data = i;
p->next = L->next;
L->next = p;
}
return L;
}

/*��ʼ������*/
void InitList(LinkList a) {
LinkList p = a;
for (; p->next != a; p = p->next) {
p->data = 0;

}
}

/* ������� */
void SeparateList(LinkList A, LinkList b, LinkList c) {
//�㷨�������㷨�ĵ�ʱ�临�Ӷ�Ϊ O��n�����ռ临�Ӷ�ΪO��1����
//�ڱ�֤�㷨����ȷ�Ե�ǰ���£�ʹ�������ٵ�ʱ�临�ӶȺ����ٵĿռ临�Ӷ�
LinkList p = A,p1 = b,p2 = c;
InitList(b);
InitList(c);
p = p->next;
p1 = p1->next;
p2 = p2->next;
while ( p != A) {
p1->data = p->data;
b->data++;
p1 = p1->next;
p = p->next;
if (p != A) {
p2->data = p->data;
c->data++;
p2 = p2->next;
p = p->next;
}
}
return;
}



30 changes: 30 additions & 0 deletions 2017-1/Cloud/1.线性表的基本操作/LinkList.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#pragma once
#ifndef LINKLIST_H
#define LINKLIST_H
#include<stdio.h>
#include<stdlib.h>
#define length 10

typedef struct LNode {
int data;
struct LNode *next;
}LNode, *LinkList;

typedef enum {
true,
false
}bool;

/* �����ı��� */
void TraverseList(LNode * p);

/* �������� */
LinkList CreatList(int n);

/* ������� */
void SeparateList(LinkList A, LinkList b, LinkList c);

/*��ʼ������*/
void InitList(LinkList);

#endif
13 changes: 13 additions & 0 deletions 2017-1/Cloud/1.线性表的基本操作/main_LinkList.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#include <stdio.h>
#include "LinkList.h"
#define length 20
int main() {
LinkList A = CreatList(length),
a1 = CreatList(length/2),
a2 = CreatList(length/2);
TraverseList(A);
SeparateList(A, a1, a2);
TraverseList(a1);
TraverseList(a2);
return 0;
}
3 changes: 3 additions & 0 deletions 2017-1/Cloud/1.线性表的基本操作/main_LinkList.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
19 17 15 13 11 9 7 5 3 1
18 16 14 12 10 8 6 4 2 0
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

作业要求:

需要在源代码文件的注释或单独使用一个 markdown格式 的纯文本文档中分析和证明你的算法使用了最少的时间(复杂>度)和最少的空间(复杂度)

138 changes: 138 additions & 0 deletions 2017-1/Cloud/5.各种查找操作/BST.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
#include "BST.h"

/* ���ұ��ij�ʼ������ */
Status _CreateBST(BiTree *T, TElemType * c) {
int i;
for (i = 0; c[i] != -1; i++) {
InsertBST(T, c[i]);
}
return OK;
}

/* ��T���в��ҹؼ���key */
Status SearchBST(BiTree T, TElemType key, BiTree f, BiTree * p) {
if (!T) {
*p = f;
return FALSE;
}
else if (key == T->data) {
*p = T;
return TRUE;
}
else if (key < (*T).data) {
return SearchBST((*T).lchild, key, T, p);
}
else {
return SearchBST((*T).rchild, key, T, p);
}
}

/* c����ؼ���key */
Status InsertBST(BiTree *T, TElemType key) {
BiTree p, s;
if (!SearchBST(*T, key, NULL, &p)) {
s = (BiTree)malloc(sizeof(BiTNode));
s->data = key;
s->lchild = NULL;
s->rchild = NULL;
s->parent = NULL;
if (!p) {
*T = s;
}
else if (key < p->data) {
p->lchild = s;
s->parent = p;
}
else {
p->rchild = s;
s->parent = p;
}
return TRUE;
}
else {
return FALSE;
}
}

/*���ұ��ij�ʼ�������Ͳ��� */
Status _Search(BiTree T, TElemType * a) {
//���δ�ҵ��򽫵�ǰ�ؼ������ӵ���ǰ���ұ��У�����ҵ�����ɾ���ùؼ������ڽ��
BiTree p, f = NULL;
int i;
for (i = 0; a[i] != -1; i++) {
if (SearchBST(T, a[i], f, &p)) {
Delete(p, f);
}
else {
InsertBST(&T, a[i]);
}
_print(T);
}
return OK;
}

/* ������������� */
Status PreOrderTraverse(BiTree T, int i) {
if (T == NULL) {
return OK;
}
if (T) {
if (i == 0) { /* ���ʽ��*/
printf("%d", T->data);
i++;
}
else
printf(", %d", T->data);
PreOrderTraverse(T->lchild, i); /* ����������*/
PreOrderTraverse(T->rchild, i); /* ����������*/
}
return 0;
}

/* ɾ��һ����� */
Status Delete(BiTree p, BiTree f) {
BiTree q, s;
q = p;
if (!p->rchild) {
if (p->parent->rchild == p) {
p->parent->rchild = p->lchild;
}
else {
p->parent->lchild = p->lchild;
}
free(q);
}
else if (!p->lchild) {
if (p->parent->rchild == p) {
p->parent->rchild = p->rchild;
}
else {
p->parent->lchild = p->rchild;
}
free(q);
}
else {
s = p->lchild;
while (s->rchild) {
q = s;
s = s->rchild;
}
p->data = s->data;
if (q != p) {
q->rchild = s->lchild;
}
else {
q->lchild = s->lchild;
}
free(s);
}
return OK;
}

/* ��ӡһ����ұ� */
Status _print(BiTree T) {
static int i = 0;
PreOrderTraverse(T, i);
printf("\n");
return OK;
}
44 changes: 44 additions & 0 deletions 2017-1/Cloud/5.各种查找操作/BST.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#ifndef BST_H
#define BST_H
#include <stdio.h>
#include <stdlib.h>
#define TElemType int
#define KeyType int

typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild, *rchild, *parent;

}BiTNode, *BiTree;
typedef enum {
FALSE,
TRUE
}bool;
typedef enum {
OK,
ERROR,
OVERFLOW
}Status;

/* ���ұ��ij�ʼ������ */
Status _CreateBST(BiTree *T, TElemType * c);

/* ��T���в��ҹؼ���key */
Status SearchBST(BiTree T, TElemType key, BiTree f, BiTree * p);

/* c����ؼ���key */
Status InsertBST(BiTree *T, TElemType key);

/* ��ӡһ����ұ� */
Status _print(BiTree T);

/* ������������� */
Status PreOrderTraverse(BiTree T, int i);

/* ɾ��һ����� */
Status Delete(BiTree p, BiTree f);

/* �ڲ��ұ��в��� */
Status _Search(BiTree T, TElemType * a);

#endif // !1
6 changes: 6 additions & 0 deletions 2017-1/Cloud/5.各种查找操作/BSTOutput.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
8, 3, 1, 6, 4, 5, 7, 10, 14, 19, 22, 30
8, 3, 1, 6, 4, 5, 7, 10, 14, 13, 19, 22, 30
7, 3, 1, 6, 4, 5, 10, 14, 13, 19, 22, 30
7, 3, 1, 6, 4, 10, 14, 13, 19, 22, 30
7, 3, 1, 6, 4, 10, 14, 13, 19, 22, 20, 30
7, 3, 1, 4, 10, 14, 13, 19, 22, 20, 30
Loading