表,栈,队列程序代码片段

来源:互联网 发布:现在哪个网络购物好 编辑:程序博客网 时间:2024/06/16 09:23
#include<iostream>#include<list>using namespace std;template <typename object>void printLots(const list<object> & L,const list<object> & P){list<object>::const_iterator iter1=L.begin();list<object>::const_iterator iter2=P.begin();int start=1;for(;iter2!=P.end()&&iter1!=L.end();iter2++){while(start<*iter2 && iter1!=L.end()){start++;iter1++;}if(iter1!=L.end())cout<<*iter1<<" ";}}int main(){int a[]={1,2,3,4,5,6,7,8};int b[]={1,3,4,6};list<int> L(a,a+8);list<int> P(b,b+4);printLots(L,P);cout<<endl;return 0;}


/*交换单链表结点,不是简单的数据交换*/void swapWithNext(Node *beforeP){Node *p,afterP;p=beforeP->next;afterP=p->next;/*假设这两结点不为空*/p->next=afterP->next;afterP->next=p;beforeP->next=afterP;}

/*交换双链表相邻结点*/void swapWithNext(Node *P){Node *beforeP;Node *afterP;beforeP=P->prev;afterP=P->next;P->next=afterP->next;afterP->next->prev=p;afterP->next=p;p->prev=afterP;beforeP->next=afterP;afterP->prev=beforeP;}

#include<iostream>#include<string>#include<algorithm>#include<stack>using namespace std;/*由后缀式求结果*/double evalPostFix(const string & str){char space=' ';string::const_iterator ptr=str.begin();string::const_iterator trailer;stack<double> s;double a,b,result;while(ptr!=str.end()){trailer=ptr;ptr=find(ptr,str.end(),space);ptr++;string token(trailer,ptr);if(token[0]!= '='){result=atof(token.c_str());if(result!=0)s.push(result);else if(token=="0.0" || token=="0")s.push(result);else{b=s.top();s.pop();a=s.top();s.pop();switch(token[0]){case '+':result=a+b;break;case '-':result=a-b;break;case '*':result=a*b;break;case '/':result=a/b;break;}s.push(result); }}}cout<<result<<endl;return result;}/*由中缀式构造后缀式*/void inToPostfix(string & result){stack<char> s;string token;cout<<"中缀式是:";cin>>token;double temp;while(token!="="){temp=atof(token.c_str());if(temp!=0.0)result=result+token+" ";else if(token=="0.0" || token=="0")result=result+token+" ";elseswitch(token[0]){case '(':s.push('(');break;case ')':while(s.top()!='('){result=result+s.top()+" ";s.pop();}s.pop();break;case '+':case '-':while( !s.empty() && s.top()!='('){result=result+s.top()+" ";s.pop();}s.push(token[0]);break;case '*':case '/':while(!s.empty() && s.top()!='+' && s.top()!='-' && s.top()!='('){result=result+s.top()+" ";s.pop();}s.push(token[0]);break;}cin>>token;}while(!s.empty()){result=result+s.top()+" ";s.pop();}result=result+"= ";cout<<"后缀式是:";cout<<result<<endl;}int main(){string str;inToPostfix(str);evalPostFix(str);return 0;}


/*一个数组实现两个栈*/

#include<iostream>using namespace std;template <typename Object>class Stack{public:explicit Stack(int n=0):theSize(n),theSize1(0),theSize2(0){objects=new Object[n];}~Stack(){delete [] objects;}bool isfull(){return theSize1+theSize2>=theSize;}bool push1(const Object & x){if(isfull()){cout<<"数组空间已满!"<<endl;return false;}objects[theSize1]=x;theSize1++;return true;}const Object &top1(){return objects[theSize1-1];}bool isEmpty1(){return theSize1==0;}bool pop1(){if(isEmpty1()){cout<<"栈1为空!不能pop!"<<endl;return false;}theSize1--;return true;}bool push2(const Object & x){if(isfull()){cout<<"数组空间已满!"<<endl;return false;}objects[theSize-theSize2-1]=x;theSize2++;return true;}const Object &top2(){return objects[theSize-theSize2];}bool isEmpty2(){return theSize2==0;}bool pop2(){if(isEmpty2()){cout<<"栈2为空!不能pop!"<<endl;return false;}theSize2--;return true;}private:int theSize1;int theSize2;int theSize;Object *objects;};int main(){Stack<int> s(10);s.push1(1);for(int i=1;i!=10;i++)s.push2(i);cout<<s.isfull()<<endl;s.push1(2);/*已满*/s.pop2();/*删除第二个栈顶*/s.push1(2);/*ok!*/for(int i=1;i!=3;i++){cout<<s.top1()<<" ";s.pop1();}cout<<endl;for(int i=1;i!=9;i++){cout<<s.top2()<<" ";s.pop2();}cout<<endl;return 0;}

/*用list链表实现的双端队列*/

#include<iostream>#include<list>using namespace std;template<typename Object>class Deque{public:Deque(){l=list<Object>();}void push(const Object &x){l.push_front(x);}const Object &pop(){Object old=l.front();l.pop_front();return old;}void inject(const Object &x){l.push_back(x);}const Object &eject(){Object old=l.back();l.pop_back();return old;}private:list<Object> l;};int main(){Deque<int> d;d.push(1);d.push(2);cout<<d.pop()<<endl;d.inject(3);cout<<d.eject()<<endl;cout<<d.eject()<<endl;return 0;}

#include<iostream>#include<vector>using namespace std;/*自我调整表的数组实现*//*只在表头插入*//*如果表中find元素找到,则把该元素放到表头,其他元素顺序保持不变*/template <typename Object>class self_adjust{public:self_adjust():theSize(0),theCapacity(20){objects=new Object[theCapacity];}void push(const Object & x){Object *old=objects;objects=new Object[theCapacity];objects[0]=x;for(int i=0;i!=theSize;i++)objects[i+1]=old[i];delete []old;theSize++;}bool find(const Object & x){int i=0;while(i!=theSize && objects[i]!=x)i++;if(i!=theSize){Object *old=objects;objects=new Object[theCapacity];objects[0]=x;int j;for(j=0;j!=i;j++)objects[j+1]=old[j];for(j=i+1;j!=theSize;j++)objects[j]=old[j];return true;}return false;}void print(){for(int i=0;i!=theSize;i++)cout<<objects[i]<<" ";}private:Object *objects;int theSize;/*长度*/int theCapacity;/*容量*/};int main(){self_adjust<int> s;for(int i=0;i!=5;i++)s.push(i);s.print();cout<<endl;s.find(2);/*2在表中*/s.print();cout<<endl;s.find(1);/*1在表中*/s.print();cout<<endl;s.find(5);/*5不在表中*/s.print();cout<<endl;return 0;}

#include<iostream>using namespace std;template<typename Object>struct node{node(Object d=0,node *p=NULL):data(d),next(p){}Object data;node * next;};template<typename Object>class Queue{public:Queue(){tail=NULL;head=tail;}void enQueue(const Object &x){node<Object> *newNode=new node<Object>(x,NULL);if(tail)tail=tail->next=newNode;elsehead=tail=newNode;}    Object deQueue(){Object val=head->data;node<Object> *ptr=head;if(head->next==NULL)head=tail=NULL;elsehead=head->next;delete ptr;return val;}private:node<Object> * head;node<Object> * tail;};int main(){Queue<int> q;for(int i=0;i!=5;i++)q.enQueue(i);for(int j=0;j!=5;j++)cout<<q.deQueue()<<" ";cout<<endl;return 0;}


原创粉丝点击