我做一道C语言题,要求用链表做:设计一个统计投票的算法,侯选人为1 2 3 ……n ,每票只选一人!
我编程如下:
#include <stdio.h>
#include <malloc.h>
typedef struct node                  /* 定义结构体 */
{
  int data;
  struct node *next;                /* 放每个人的投票对象的编号 */
}ticket;
ticket p;                           /* 定义全局变量 */
ticket *input_ticket(ticket *h)      /* 投票函数 */
{
 ticket *p;
 int i;
 int ch;
 h=(ticket*)malloc(sizeof(ticket));
 h->next=NULL;
 for(i=0;i<10;i++)                  /* 10人投票,输入每人的投票对象的编号到链表中 */
 {
  p=(ticket*)malloc(sizeof(ticket));
  scanf("%d",&ch);
  p->data=ch;
  p->next=h->next;
  h->next=p;
 }
 return(h);                      
}
void output_ticket(ticket *h)     /* 输出候选人得票数 的函数*/
{
 ticket *p;
 int i;
 int a[10]={0};                    /* 用一个数组装每人得票数 ,初始化都为0票*/
 p=h->next;
 while(p!=NULL)                   /* 循环判断——有问题:为什么每次到这里都不执行,直接跳过?
                                   将while用for循环代替还是不执行就跳过了! */
  {
   printf(" %d",p->data);         /* 检验是否执行了while循环,结果显示没有。不知道原因! */
   a[p->data-1]+=1;                /* 数组中0-9分别放 1-10候选人的票数,有投票就加1 */
   p=p->next;
  }
 for(i=0;i<10;i++)                /* 输出候选人得票数,结果不对! */
 printf(" %d",a[i]);
 printf("\n");
}
void main()
{
 ticket *h;
 h=&p;
 input_ticket(h);
 output_ticket(h);
}
 /* 以上是程序,运行时输入0-9十个数(候选人号码)时,发现我的输出中函数“p->data"不能指向原来
       建立的链表(详细问题见上面注释),不知道问题究竟在哪里,请指点!谢谢! */
[此贴子已经被作者于2007-3-22 13:09:37编辑过]



											
	    

	



,给出链表建立.LZ再写过这个函数.