需要实现动态大小,那么需要使用链表是适合的。
这是小弟写的一个份代码:比较简单只是说明链表更适合做动态插入。
同时提出一个问题:【标准输入缓冲区的刷新问题】请参看源码,
有不足之处请指出。
/**
此处对于输入缓存没什么好的解决办法。
只能在标准输入后加getchar()来解决,
有如哪位大虾能有好的方法请qq:153612021
**/
#include<stdio.h>
typedef struct{
int num;
struct data *next;
} data;
/**
增加元素
**/
int add (data *head)
{
data *temp=head ;
data *d;
if(head ==NULL)
{
printf("head is NULL\n");
return -1;
}
if((d =(data *)malloc(sizeof(data)*1))==NULL)
{
printf("malloc error\n");
return -1;
}
printf("add data ,please input data:\n");
scanf("%d",&d->num);
getchar();
d->next=NULL;
while(temp->next){
temp=temp->next;
}
temp->next =d;
return 0;
}
/**
显示链表信息
**/
int display(data *head)
{
data *temp=head;
data *d;
if(head ==NULL)
{
printf("head is NULL\n");
return -1;
}
if((d =(data *)malloc(sizeof(data)*1))==NULL)
{
printf("malloc error\n");
return -1;
}
printf("NUM\n");
while(d=temp->next)
{
printf("%d\t",d->num);
temp =temp->next;
}
}
/**
主函数:带头节点的链表
**/
void main()
{
data *head;
char y;
if(head =(data*)malloc (sizeof(data))==NULL)
{
printf("molloc head error\n");
exit (-1);
}
while(1){
printf("DO YOU WANT ADD DATA Y/y TO ADD:\n");
scanf("%c",&y);
getchar();//???
if(y=='Y'||y=='y')
{
if(add(head)==0)
{
printf("add success\n");
}else{
printf("add fail\n");
}
}else{
if(y=='n'||y=='N')
break;
}
}
display(head);
}