
/单链表的就地逆置
// 头插法:
//先将头结点与链表的其他节点断开,然后利用头插法的原理将剩下的结点一次插到头结点的后面
//这样就实现了逆置
//由于通过形参可以改变主函数中的数值所以此处函数的类型可以设置为void类型
void ReverseLinkList(LNode &La){
LNode p,q;
LNode m = &La;//新建一个结点用于记住头结点
p = m ->next;
m ->next = NULL;
while(p != 0){
q = p ->next;
p ->next = m ->next;//第一次执行时正好可以把第一个连在头结点后的结点的后继设置为NULL
m ->next = p;
p = q;
}
}
如果是双向链表的话,在结构体中next指向下一个,pre指向上一个,伪代码如下:struct p,q;p=list->next;q=p->next;loop:p->next=p->pre;p->pre=q;p=q;q=p->nextwhile(p=null)大概是这样吧,原理是交换原地交换next,pre,然后将头指针由原来指向a改到指向f就行了
第一个程序的错误太多,根本不会是那个结果。
main() {char a[]={'a','b','c','d','e','f','g','h','\0',}; int i,j;
i=sizeof(a); j=strlen(a);printf("%d,%D\n",i,j);}
输出结果:9,8
char a[]={'a','b','c','d','e','f','g','h','\0',}; 是什么意思
i=sizeof(a);是求数组a在内存中的字节数,字符串数组会在定义时在后面加一个'\0'表示结束符。你定义时占了八个字节,再加一个'\0'即9个字节。所以结果是9;
j=strlen(a);是求字符串长度,这长度不包括最后那个系统加上去的'/0',也就是8个
以下程序中的函数reverse的功能是将a所指数组重的内容进行逆置
void reverse(int a[], int n) //定义倒置函数。它有两个参数
{int i,t; 定义两个整数变量。
for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} /两行实现把数组a[]的前面n位倒置/
}
main()
{int b[10]={1,2,3,4,5,6,7,8,9,10};// 定义数组;
int i,s=0;
reverse(b,8);// 调用函数reverse;把数组从第一位到第八位倒置;即倒置后数组b成了{8,7,6,5,4,3,2,1,9,10};
for(i=6;i<10;i++)
s+=b[i]; //这两行求数组b中从第7位到第10位的和。 即2+1+9+10=22;
printf("%d\n",s);}
程序运行后结果是:22
void reverse(int a[], int n)是定义 reverse函数。
{int b[10]={1,2,3,4,5,6,7,8,9,10}定义数组b;
s+=b[i];是s=s+b[i];
reverse(b,8);是函数调用。
以下是一个示例程序,演示了如何在主程序中输入一个字符串并调用函数StrReverse实现字符串的逆置:
c
#include <stdioh>
#include <stringh>
// 函数声明
char StrReverse(char str);
// 主函数
int main() {
char str[100];
// 输入字符串
printf("请输入一个字符串:");
scanf("%s", str);
// 调用函数实现字符串逆置
StrReverse(str);
// 输出逆置后的字符串
printf("逆置后的字符串为:%s\n", str);
return 0;
}
// 函数定义
char StrReverse(char str) {
int len = strlen(str);
int i, j;
char temp;
for (i = 0, j = len - 1; i < j; i++, j--) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
return str;
}
该程序中先在主函数中输入一个字符串,然后调用名为StrReverse的函数对该字符串进行逆置,最后输出逆置后的字符串。函数StrReverse的实现使用了双指针的方法,具体实现过程在注释中有说明。
以上就是关于求数据结构程序对单向链表进行就地逆置全部的内容,包括:求数据结构程序对单向链表进行就地逆置、根据线性表的链式存储结构完成将abcdef就地逆置成fedcba的程序、c语言--功能是将a所指数组重的内容进行逆置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)