您正在查看 "数据结构" 分类下的文章
2006-07-24 17:38
【程序说明】 这些程序大多都是在2005年上半年断断续续写的,除个别程序没完成外,其余都是敲到计算机里一步一步调试出来的。其中各个程序独立,用VC6打开直接编译后即可运行。有的程序我分析的比较满意,例如表达式的求解,但有一些不够深入,特别是图和高级树操作部分,有时间我会深入的分析一下。 程序主要来源于以下的参考数目和网上的一些资料,事实上我自己的程序写的很少,最多也就是根据书上的伪代码用C语言描述一下,不过好在我学习了很多设计思想。数据结构是软件理论的重要基础,我会不断更新这些程序。 |
2006-07-24 17:37
N 类别 属性 功能 文件名 说明 日期 1. 数据结构 顺序 数组 List_Array 数组实现类 2005.01 2. 数据结构 顺序 链表 List_Simple 头为倒序 2005.01 3. 数据结构 顺序 循环链表 List_ChildSTL STL实现 2005.01 4. 数据结构 顺序 循环链表 List_Child c实现,头为正常顺序 2005.01 5. 数据结构 顺序 链ATL List_STL STL的一个引用 2005.01 6. 数据结构 顺序 最大值 List_MAX 求数组的最大值 2005.09 7. 数据结构 桟 桟类 Stack_Array 数组实现 2005.01 8. 数据结构 桟 双桟 Stack_DblStack 双桟的操作 2005.01 9. 数据结构 桟 转二进制 Stack_Hex 2005.02 10. 数据结构 桟 行编辑 Stack_Edit 2005. |
2006-07-24 17:36
#include "iostream.h" #include "assert.h" template <class ELEM> class list { private: ELEM *nodelist; int msize; int curr; int curr_len; public: list(const int size); ~list(); void clear(); void display(); ELEM append(ELEM value); void insert(ELEM value); ELEM remove(); ELEM fetch(); void setFirst(); void setNext(); }; template <class ELEM> list<ELEM>::list(const int size) { nodelist = new ELEM[size]; if (nodelist == NULL) { cout << "Insuffifient memory ending\n"; return; } msize = size; curr = 0; curr_len = 0; } template <class ELEM> list& |
2006-07-24 17:36
#include "iostream.h" template <class ELEM> class list { protected: struct ListNode { ELEM data; ListNode *link; }; ListNode *first; public: list(); ~list(); void add(ELEM e); void RemoveAfter(ELEM e); ELEM FindIndex(ELEM e); void PrintList(); void Insert(ELEM e, int i); void display(); }; template <class ELEM> list<ELEM>::list() { first = NULL; } template <class ELEM> list<ELEM>::~list() { ListNode *p = first; if (p != NULL) { first = first->link; delete p; p = first; } } // 函数功能:把插入的节点做头节点 template <cl |
2006-07-24 17:36
#include <stdio.h> #include <list> #include <iostream> using namespace std; list<int> cl; list<int>::iterator Iter,curr; typedef struct node { int ndata; node *pNext; }node; // 函数功能:模拟循环链表 void step(int n) { for (int i = 0; i < n; i ++) { curr ++; if (curr == cl.end()) curr = cl.begin(); } } // 删除当前的 void remove() { Iter = curr; if (Iter == cl.begin()) Iter = cl.end(); else Iter --; cl.erase(curr); curr = Iter; } void main() { int s = 3, m = 4; for (int i = 0; i < 10; i ++) cl.push_back(i + 1); for (Iter = cl.begin(); Iter != cl.end(); Iter ++) cout << *Iter << " "; for (Iter = cl.begin(); Iter |
2006-07-24 17:35
#include <stdio.h> #include <malloc.h> typedef struct node { int data; node *pNext; }node; node *pCurr; node *CreateList(int nSize) { if (nSize <= 0) return NULL; node *pHead, *p, *q; for (int i = 0; i < nSize; i ++) { p = (node *)malloc(sizeof(node)); p->data = i + 1; if (i == 0) { pHead = p; q = p; } else { q->pNext = p; q = p; } } p->pNext = pHead; pCurr = pHead; return pHead; } // 函数功能:删除p后个节点 node* DelList(node *p) { if (p == NULL) return NULL; node *q; q = p->pNext; p->pNext = q->pNext; free(q) |
2006-07-24 17:35
#include <list> #include <iostream> using namespace std; // 函数功能:正序显示 void Display(list <int> c) { list <int>::iterator Iter; cout << "list ="; for ( Iter = c.begin( ); Iter != c.end( ); Iter++ ) cout << " " << *Iter; cout << endl; } // 函数功能:倒序显示 void Rev_Display(list <int> c) { list <int>::reverse_iterator rvIter; cout << "list ="; for ( rvIter = c.rbegin( ); rvIter != c.rend( ); rvIter++ ) cout << " " << *rvIter; cout << endl; } int main( ) { list <int> c1, c2; list <int>::iterator Iter; c1.push_back( 10 ); // c1,c2各初始化3个值 c1.push_back( 20 ); c1.push_back( 30 ); c2.push_back( 40 ); c2.push_back( 50 ); &nb |
2006-07-24 17:34
#include <iostream.h> void main() { //存放100个实数的数组 double Num[100] = {4543.9,4543.9,3,45,654.7,7,66,35,45,4,6,4543.9,5,46,54,6,43,5.980,34}; //记录最大值所在位置的数组 int pos[100]; //初始设定数组的第1个元素为最大值 int position = 0; //j指示位置数组pos的下标 int j = 1; for(int i = 1;i < 100; ++ i) { if(Num[i] > Num[position]) { position = i; //记下新的最大值的位置 j = 1; //位置数组pos的下标恢复为1,下标为0的位置为position预留 } else if(Num[i |
2006-07-24 17:34
#include "stdio.h" #include "assert.h" template <class ELEM> class Stack { public: ELEM *ElmList; int top; int maxsize; Stack(int size); ~Stack(); Push(ELEM item); ELEM Pop(); ELEM GetTop(); bool IsEmpty(); bool IsFull(); }; template <class ELEM> Stack<ELEM>::Stack(int size) { maxsize = size; ElmList = new ELEM[maxsize]; assert(ElmList != (ELEM *)NULL); top = -1; } template <class ELEM> Stack<ELEM>::~Stack() { delete ElmList; } template <class ELEM> bool Stack<ELEM>::IsFull() { return top == maxsize - 1; } template <class ELEM> bool Stack<ELEM>::IsEmpty() { return top == -1; } template <class EL |
2006-07-24 17:33
/* 双栈的类定义如下: ------------------------------------------------------------------ | ---------------> | | <----------------- | | <--------------- | | -----------------> | ------------------------------------------------------------------ | | | | |
2006-07-24 17:33
#include <stdio.h> #include <stack> void main() { using namespace std; stack <int> s1; int n = 0; printf("Please input a number:\n"); scanf("%d", &n); while (n) { s1.push(n % 2); n /= 2; } while (!s1.empty()) { printf("%d", s1.top()); s1.pop(); } printf("\n\n"); }
|
2006-07-24 17:33
// 输入:whli##ilr#e(s#*s) // outcha@putchar(*s=#++) // 输出:while(*s) // putchar(*s++); #include <stdio.h> #include <stack> void LineEdit() { using namespace std; stack <char> stackEdit, s1; char ch; ch = getchar(); while (ch != EOF) { while (ch != EOF && ch != '\n') { switch(ch) { case '#': stackEdit.pop(); break; case '@': { whil |
2006-07-24 17:33
#include <stdio.h> #include <stack> int f(int n) { if (n == 0) return 0; if (n == 1) return 1; if (n > 1) return f(n - 1) + f(n - 2); return -1; } int f1(int n) { using std::stack; stack<int> aStack; if (n > 1) { aStack.push(n-1); aStack.push(n-2); } int s = 0, temp; while (!aStack.empty()) { temp = aStack.top(); aStack.pop(); if (temp > 1) { aStack.push(temp-1); aStack.push(temp-2); } if (temp == 1) s ++; } return s; } void main() { int n = 10; printf("the result is : %d\n", f(n)); pri |
2006-07-24 17:32
#include <stdio.h> #include <stack> int Maze[100] = {1,1,1,1,1,1,1,1,1,1, 1,0,0,1,0,0,0,1,0,1, 1,0,0,1,0,0,0,1,0,1, 1,0,0,0,0,1,1,0,0,1, 1,0,1,1,1,0,0,0,0,1, 1,0,0,0,1,0,0,0,0,1, 1,0,1,0,0,0,1,0,0,1, 1,0,1,1,1,0,1,1,0,1, 1,1,0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,1,1,1}; typedef struct Path { int ord; int seat; int di; }Path; bool Pass(int curpos) { if (Maze[curpos] == 0) return true; else return false; } void FootPrint(int curpos) { Maze[curpos] = 1; } void MarkPrint(int curpos) { Maze[curpos] = 1; } int N |
2006-07-24 17:32
#include <stdio.h> #include <stack> void main() { char A[100] = "3.5.2.-*7.+@"; int k, i = 0; int op1, op2; using namespace std; stack <int> stOPND; //memset(A, 0, 100); //scanf("%s", &A); while(A[i] != '@') { if (A[i] >= '0' && A[i] <= '9') { k = 0; while(A[i] != '.') { k = k * 10 + A[i] - '0'; i ++; } stOPND.push(k); } switch(A[i]) { case '+': { op1 = stOPND.top(); stOPND.pop(); |
|
| |