求助:单链表删除和添加问题!!!!!!/*
/* * File: node.c
* Author: 叶军
*
* Created on 2010年8月2日
*/
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define NAME_LEN (10)
typedef struct node
{
char name[NAME_LEN];
int count;
struct node * next;
}Node;
Node *Select=NULL ,*head=NULL,*it=NULL,*temp1=NULL;
/*******************************************
*函数名:Node *delet( Node * d_head, char d_name[])
*传入参数:Node * d_head, char d_name[]
*传出参数:d_head地址
*函数功能:如果候选人新增票数为-1,则暂时删除该候选人
*
********************************************/
Node *delet( Node * d_head, char d_name[])
{
Node *d_it=d_head;
Node *d_it2=NULL;
// Node *d_it3=d_head;
while(d_it)
{
if(strcmp(d_head->name,d_name) == 0) //删除头结点
{
d_head = d_head->next;
free(d_it);
break;
}
d_it2=d_it;
d_it=d_it->next;
if(strcmp(d_it->name,d_name) == 0) //删除其他结点
{
d_it2->next=d_it->next;
free(d_it);
break;
}
}
return d_head;
}
/*******************************************
*函数名:Node *creat( )
*传入参数:void
*传出参数:head地址
*函数功能:如果之前已经有改候选人名字,则累加票数,否则创建新
*的候选人如果候选人新增票数为-1,则调用delet函数暂时删除该候选人
*
********************************************/
Node *creat( )
{
char array[NAME_LEN]={0},number=0,flag=0;
Node *temp=NULL ;
// printf("21\n");
if(head == NULL)
{
Select=(Node *)malloc(sizeof(Node));
memset(Select ,0,sizeof(Node));
head = Select;
temp1=Select;
// printf("24\n");
printf("输入候选人的名字:\n");
scanf("%s",Select->name);
printf("输入候选人的票数:\n");
scanf("%d", &Select->count);
}
else
{
// printf("35\n");
printf("输入候选人的名字:\n");
scanf("%s",array);
printf("输入候选人的票数:\n");
scanf("%d", &number);
if(-1 == number)
{
head=delet( temp1,array);
}
for(temp=head; temp; temp=temp->next) //如果输入的名字和已有的名字相同,且输入的票数不为 -1,则累加票数
{
//printf("45\n");
if(strcmp(temp->name,array) == 0 && number != -1)
{
temp->count+=number;
flag=1;
break;
}
}
if(0 == flag )
{
// printf("53\n");
Select=(Node *)malloc(sizeof(Node));
memset(Select ,0,sizeof(Node));
strcpy(Select->name,array);
Select->count = number;
it->next=Select;
}
}
it=Select;
for(temp=head; temp; temp=temp->next)
{
// printf("63\n");
printf("候选人的名字:%s 候选的人的票数:%d\n",temp->name,temp->count);
}
// printf("66\n");
return (head);
}
int main(void)
{
Node *m_select=NULL;
char a[9]={0};
while(1)
{
printf("请选择继续投票:yes or no\n");
scanf("%s",a);
if(a[0] == 'n')
{
break;
}
head=creat( );
//m_head1=print(m_head );
}
while(head)
{
m_select = head;
head = head->next;
free(m_select);
}
return (0);
}
这是我写的一段代码,是个投票程序投票程序:
1,使用链表实现统计
2,每次输入一个候选人字符串名字和一个整形票数
3,如果之前已经有改候选人名字,则累加票数,否则创建新的候选人
4,如果候选人新增票数为-1,则暂时删除该候选人
5,投票结束后打印所有候选人及其票数
6,要特别注意删除链表头结点位置候选人的情况
程序有写问题,不能准确的删除!多多指教!!