十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
问题一,那是逗号表达式,括号内依次运算,取最后的值为结果,所以是3而不是1,这个是定义了的,没有为什么,记住就好;问题二,3%5是3,因为这是取余运算,就是简单的取余数,不用想的很复杂,和除法有区别!、
10年积累的成都网站制作、做网站、外贸营销网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有合肥免费网站建设让你可以放心的选择与我们合作。
空格不算是空字符串,str=""这样的才算是空字符串,里面什么都没有,而str=" "是有内容了,这个str存储了一个字符(空格),如果你要把空格也算是空字符串,那么要稍作修改:
char str[] = " ";
int len = strlen(str), i = 0;
if (len 0)
{
while(i len str[i++] == ' ');
if (i len) // 字符串不空
else // 空字符串
}
void的意思是函数没有可用的返回值,函数本身的return返回语句也不带表达式
比如,你不想主函数有返回值时,可以写:
void main() {
return; //或者可以省略这句
}
#includestdio.h
#includestdlib.h
typedef struct
{
int arr[100];
int last;
}SeqList;
void InitList(SeqList *L);
void IsEmpty(SeqList L);
int GetLength(SeqList L);
void DeletNum(SeqList * L,int num);
void GetEmpty(SeqList * L);
void PaiXu(SeqList * L);
int main()
{
int length,addr,num;
SeqList L,*p;
p=L;
printf("创建表\n");
InitList(L);//初始化
IsEmpty(L);//判断是否为空
printf("input the length\n");
scanf("%d",length);
L.last=length-1;//数组最后下个数的下标
printf("输入表中的值\n");//输入表中的值
for(int i=0;i=L.last;i++)
scanf("%d",L.arr[i]);
length=GetLength(L);
printf("输入想输出的数在表中的位置(从1开始数)\n");//输出某个位序上的数据元素
scanf("%d",addr);
if(addrlength)
printf("该位置不存在,超过了范围\n");
else
printf("第%d数为%d\n",addr,L.arr[addr-1]);
printf("输入想得到前驱后继的结点的值\n");//输出某元素的前驱后继
scanf("%d",num);
for(i=0;i=L.last;i++)
{
if(L.arr[i]==num)
{
printf("找到该结点,结点的位置为第%d数\n",i+1);
if((i+1)==length)
printf("该结点无后继\n");
else
printf("结点后继为%d\n",L.arr[i+1]);
if((i-1)0)
printf("该结点无前驱\n");
else
printf("结点前驱为%d\n",L.arr[i-1]);
break;
}
}
if(i==length)
printf("表中无此数\n");
//将奇偶排序
PaiXu(L);
printf("输入想要删除的数\n");
scanf("%d",num);
DeletNum(p,num);//删除该数
GetLength(L);//删除后的表长
GetEmpty(L);//置空
IsEmpty(L);//判断是否为空
return 0;
}
void InitList(SeqList * L)
{
L-last=-1;
}
void IsEmpty(SeqList L)
{
if(L.last=0)
printf("该表不为空\n");
else
printf("该表为空\n");
}
int GetLength(SeqList L)
{
printf("该表的长度为%d\n",L.last+1);
return L.last+1;
}
void DeletNum(SeqList * L,int num)
{
int i,k;
for(i=0;i=L-last;i++)
{
if(L-arr[i]==num)
{
k=i;
break;
}
}
if(i==L-last+1)
printf("表中无此数\n");
for(i=k;iL-last;i++)//删除该数后,后面的数向前移
L-arr[i]=L-arr[i+1];
L-last--;//表长减一
for(i=0;i=L-last;i++)
printf("%d ",L-arr[i]);
}
void GetEmpty(SeqList * L)
{
L-last=-1;
}
void PaiXu(SeqList * L)
{
int i,j,t;
i=0;
j=L-last;
while(ij)
{
while(L-arr[i]%2!=0)
i++;
while(L-arr[j]%2==0)
j--;
if(ij)
{
t=L-arr[i];
L-arr[i]=L-arr[j];
L-arr[j]=t;
}
}
printf("奇偶排序后\n");
for(i=0;i=L-last;i++)
printf("%d ",L-arr[i]);
}
有两个地方错误
1:IsEmpty函数中是空返回真,非空返回假,你写反了
int IsEmpty(LinkQueue *Q)
{
if(Q-front==Q-rear)
return(TRUE);////////////
else return(FALSE);/////////////
}
2:GetHead函数中*x=Q-front-next-data;因为Q-front只是头指针,不保存数据
int GetHead(LinkQueue *Q,int *x)
{
if(!IsEmpty(Q))
{
*x=Q-front-next-data;///////////////
return(TRUE);
}
else return(FALSE);
}
一个文件内的内容加载到内存之后是连续存储的。(至少这种小文件,不超过4KB的)
如果想达到删除一行的效果。至少有三种办法可以实现
一、最简单的办法,建议读到链表里,删除其中一个节点。然后再覆盖写回到文件。
二、找到要删除的位置,fseek到该位置,将之后需要保留的文件内容,从这里开始写。
三、利用内存映射,将文件映射到内存,直接对内存修改,但是对内存修改,也是需要类似于方法2,将需要保留的内容重新移动位置。
综上,方法一最简单。