| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 513 人关注过本帖
标题:单链表方面的问题,求大神解答
取消只看楼主 加入收藏
cchjjy123
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-10-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:0 
单链表方面的问题,求大神解答
小弟不才,才学习c,数据结构,不过要求编一个股票撮合交易的程序,好不容易弄出来,错误太多,运行下就崩了,麻烦大神能抽空看看,指点一下,谢了。
以下是要求···
在股票交易中,股民可以通过各种手段将委托送到股票交易所。每个委托主要说明了股民身份、买卖的股票、价格和数量。交易的规则是价格优先、时间优先,即出的价格最高的人先买,出的价格最低的人先卖。两个委托只有价格合适时才能成交,未成交的委托按价格顺序放在撮合队列中。每个股票有两个撮合队列:买队列和卖队列。只有当买委托的价格高于等于卖委托的价格,两个委托才可以成交,成交价取两个委托价格的平均值,成交量取两个委托数量的最小值。委托可以是完全成交或部分成交,部分成交的委托保留在撮合队列中继续交易。试利用单链表作为存放委托的数据结构(撮合队列),编写一模拟股票交易的程序,该程序有以下几个功能:
1. 委托申请:
    输入:每个委托包括四个数据项,股票编码(4位数字)、价格(浮点数)、数量(整数)、买/卖(B/S)
    输出:a. 程序为每个委托产生一个唯一的序号(%04d),该序号从1开始;b. 每笔成交包括:成交价格(%6.1f)、成交量(%4d)、买委托序号(%04d)、卖委托序号(%04d)。
2. 查询未成交的委托:
    输入:股票编码
输出:按撮合队列中委托的顺序,分别输出该股票未成交的委托,每个输出的委托包括:委托序号(%04d)、股票编码(%04d)、价格(%6.1f)、数量(%4d)、B/S(买/卖)
3. 委托撤消:
    输入:要撤消的委托号。
    输出:若成功,显示该委托信息,其中委托包括数据项:委托序号、股票编码、价格、数量、B/S(买/卖);否则显示“not found”失败信息。

这是我的代码···求指点,问题在哪

#include <iostream>
using namespace std;
#include <stdlib.h>
#include <malloc.h>

typedef struct stock
{int cord;
 int number;
 float price;
 int quantity;
 char bos;
 struct stock * next;
}snode;

typedef snode buylist,selllist;
 buylist *p,*head1;
 selllist *q,*head2;

void listInitiate(snode **head)
{
*head=(snode*)malloc(sizeof(snode));
//(*head)=NULL;
(*head)->next=NULL;
}

int listInsert(snode *head,int a,int b,float c,int d,char e)
{
snode *m,*n;
n=head;
m=(snode*)malloc(sizeof(snode));
m->cord=a;
m->number=b;
m->price=c;
m->quantity=d;
m->bos=e;
m->next = NULL;
while(n->next!=NULL)
{n=n->next;}
n->next=m;
return 1;
}

int listdelete(snode *head,snode *p)
{
snode *q;
q=head;
while(q->next!=p)
{
  q=q->next;
}
q->next=p->next;
free(p);
return 1;
}

int exchange(buylist *head1,selllist *head2)
{
float averageprice;
buylist *p;
selllist *q;
p=head1,q=head2;
for(;p->next==NULL;p==p->next)
   for(;q->next==NULL;q==q->next)
      {
       if(p->cord==q->cord)  averageprice=(p->price+q->price)/2;
       {
         if(p->quantity>q->quantity)
         {
            p->quantity=p->quantity-q->quantity;
            listdelete(head2, q);
            printf("成交价格:%6.1f,成交量:%4d,买委托序号:%04d,卖委托序号:%04d",averageprice,q->quantity,p->cord,q->cord);
         }
         else if(p->quantity<q->quantity)
         {
            q->quantity=q->quantity-p->quantity;
            listdelete(head1,p);
            printf("成交价格:%6.1f,成交量:%4d,买委托序号:%04d,卖委托序号:%04d",averageprice,p->quantity,p->cord,q->cord);
         }
         else if(p->quantity=q->quantity)
         {
            listdelete(head1,p);
            listdelete(head2,q);
            printf("成交价格:%6.1f,成交量:%4d,买委托序号:%04d,卖委托序号:%04d",averageprice,q->quantity,p->cord,q->cord);
         }
            }
   }
return 1;
}

int orderb(buylist *head1)
{
 buylist *k,*l;
 k=(snode*)malloc(sizeof(snode));
 l=(snode*)malloc(sizeof(snode));
 k=head1;
 l=head1->next;
 if(l->next==NULL) return 0;
 while(l!=NULL)
 {
     l=l->next;
   while(k->next!=l&&l!=NULL)
   { if(l->price>k->next->price)
     {    k->next->next=l->next;
        l->next=k->next;
        k->next=l;}

        k=k->next;}
 }
    return 1;
}

int orders(selllist *head2)
{
 selllist *k,*l;
 k=(snode*)malloc(sizeof(snode));
 l=(snode*)malloc(sizeof(snode));
 k=head2;
 l=head2->next;
 if(l->next==NULL) return 0;
 while(l!=NULL)
 {
     l=l->next;
   while(k->next!=l&&l!=NULL)
   { if(l->price<k->next->price)
     {    k->next->next=l->next;
        l->next=k->next;
        k->next=l;}

        k=k->next;}
 }
    return 1;
}



void main()
{
int a,b,c,i=0;
snode sd;
buylist bt;
selllist st;
 listInitiate(&head1);
 listInitiate(&head2);

// cout<<head1;
sta:
  cout<<"请选择交易类型\n"<<"1.委托申请\n"<<"2.查询未成交的委托\n"<<"3.委托撤消\n";
  cin>>a;
  switch(a)
  {
  case 1:
        cout<<"股票编码(4位):";cin>>sd.number;
        cout<<"  价格:";cin>>sd.price;
        cout<<"  数量:";cin>>sd.quantity;
        cout<<"  买/卖(B/S):";cin>>sd.bos;
        i=i+1;
        printf("该委托序号为:%04d",i);

    if (sd.bos=='B')
        {   
            bt.bos=sd.bos;
            bt.number=sd.number;
            bt.price=sd.price;
            bt.quantity=sd.quantity;
            bt.cord=i;

            p=head1;
            listInsert(p,bt.cord,bt.number,bt.price,bt.quantity,bt.bos);
        }
    else
        {   
            st.bos=sd.bos;
            st.number=sd.number;
            st.price=sd.price;
            st.quantity=sd.quantity;
            st.cord=i;

            q=head2;
            listInsert(q,st.cord,st.number,st.price,st.quantity,st.bos);
        }

        exchange(head1,head2);
        orderb(head1);
        orders(head2);
        goto sta;


  case 2:cout<<"请输入股票编码:";
        cin>>b;
        buylist *u;
        selllist *v;
        u=head1;
        v=head2;
        for(;u->next!=NULL;u=u->next)
           if(u->number==b) printf("委托序号:%04d, 股票编码:%04d, 价格:%6.1f, 数量:%4d, B/S(买/卖):",u->cord,u->number,u->price,u->quantity,u->bos);
        for(;v->next!=NULL;v=v->next)
           if(v->number==b) printf("委托序号:%04d, 股票编码:%04d, 价格:%6.1f, 数量:%4d, B/S(买/卖):",v->cord,v->number,v->price,v->quantity,v->bos);
        goto sta;

 
  case 3:cout<<"请输入要撤消的委托号:";
        cin>>c;
        buylist *g;
        selllist *h;
        g=head1;
        h=head2;
        for(;g->next!=NULL;g=g->next)
           if(g->cord=c)
           {printf("委托序号:%04d, 股票编码:%04d, 价格:%6.1f, 数量:%4d, B/S(买/卖):",g->cord,g->number,g->price,g->quantity,g->bos);
           listdelete(head1,g);
           }
           
        for(;h->next!=NULL;h=h->next)
           if(h->cord=c)
           {printf("委托序号:%04d, 股票编码:%04d, 价格:%6.1f, 数量:%4d, B/S(买/卖):",h->cord,h->number,h->price,h->quantity,h->bos);
           listdelete(head2,h);
           }
           else cout<<"not found/n";
           
           goto sta;
  }
}
搜索更多相关主题的帖子: 股票交易 交易所 买卖 
2013-10-07 11:16
快速回复:单链表方面的问题,求大神解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017800 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved