百度空间 | 百度首页 
               
 
文章列表
 
您正在查看 "数据结构" 分类下的文章

2006-07-24 17:38

【程序说明】

这些程序大多都是在2005年上半年断断续续写的,除个别程序没完成外,其余都是敲到计算机里一步一步调试出来的。其中各个程序独立,用VC6打开直接编译后即可运行。有的程序我分析的比较满意,例如表达式的求解,但有一些不够深入,特别是图和高级树操作部分,有时间我会深入的分析一下。

程序主要来源于以下的参考数目和网上的一些资料,事实上我自己的程序写的很少,最多也就是根据书上的伪代码用C语言描述一下,不过好在我学习了很多设计思想。数据结构是软件理论的重要基础,我会不断更新这些程序。

类别:数据结构 | 评论(1) | 浏览()
 
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.
类别:数据结构 | 评论(0) | 浏览()
 
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&
类别:数据结构 | 评论(0) | 浏览()
 
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
类别:数据结构 | 评论(0) | 浏览()
 
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
类别:数据结构 | 评论(0) | 浏览()
 
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)
类别:数据结构 | 评论(1) | 浏览()
 
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
类别:数据结构 | 评论(0) | 浏览()
 
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
类别:数据结构 | 评论(0) | 浏览()
 
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
类别:数据结构 | 评论(0) | 浏览()
 
2006-07-24 17:33
/*
     双栈的类定义如下:

     ------------------------------------------------------------------
         | ---------------> |              |  <-----------------  |
         | <--------------- |              |  ----------------->  |
     ------------------------------------------------------------------
         |                  |              |                      |

类别:数据结构 | 评论(0) | 浏览()
 
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");
}

类别:数据结构 | 评论(0) | 浏览()
 
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
类别:数据结构 | 评论(0) | 浏览()
 
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

类别:数据结构 | 评论(1) | 浏览()
 
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

类别:数据结构 | 评论(2) | 浏览()
 
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();

类别:数据结构 | 评论(0) | 浏览()
 
     
 
 
文章分类
 
     
 
文章存档
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
最新文章评论
   
 
 
 
 

回复wajika: 如果光凭后缀...那杀毒就安逸了...
 
     


©2009 Baidu