c语言,中p->next->next合法么? p-data=q->data合法么? C语言,p->next和p->data的区别?
C\u8bed\u8a00\u91cc\u9762p->next->data\u662f\u4ec0\u4e48\u610f\u601d\uff1f\u8fd9\u662f\u94fe\u8868\u7684\u7ed3\u6784\u5c31\u662f\u8fd9\u4e2a\u7ea2\u8272\u6807\u7684\u6570\u636e
\u5728\u7ed3\u6784\u4f53\u6307\u9488\u91cc\u9762\u60f3\u8981\u5f15\u7528\u91cc\u9762\u7684\u5143\u7d20\u5c31\u8981\u7528->\u7b26\u53f7\u800c\u4e0d\u662fxx.xx
\u8fd9\u91cc\u8bf4\u5230\u7684\u662f\u6307\u9488\u548c\u94fe\u8868\uff0c\u901a\u4fd7\u70b9\u8bb2\u3002\u4e94\u4e2a\u4eba\u6392\u6210\u4e00\u5217\uff0c\u6bd4\u5982\u4ed6\u4eec\u6709\u4e00\u4e9b\u5171\u540c\u7684\u7279\u70b9\uff0c\u90fd\u662f\u7537\u7684\uff0c\u90fd\u662f\u5b66\u751f\u7b49\u3002\u90a3\u4e48p->data\u6307\u7684\u662f\u5f53\u524d\u8fd9\u4e2a\u4eba\u7684\u7279\u70b9(\u7537\u7684\uff0c\u5b66\u751f)\u5c5e\u6027\uff0cp->next\u6307\u7684\u662f\u4e0b\u4e00\u4e2a\u4eba.
如果考虑全面的话,有时候是不合法的,比如p所在的位置是链表的最后一个结点或者链表中有0个结点。当然大部分还是合法的,你可以编一个小程序运行一下,下面的是我编的一个小程序,你可以运行一下
我先说一下运行结果:
当p结点后面有两个或两个以上的结点时,就能够准确的输出所有的值;当p结点后面只有一个结点时,会准确输出p结点和他后面结点的值,然后产生一个随机值;当p结点为链表的最后一个结点时,程序报错。
#include <stdio.h>
typedef struct ln
{
int data;
struct ln *next;
} node;
int main()
{
int x;
node *p, *q, *head;
p=(node *)malloc(sizeof(node));
head=p;
p->next=NULL;
while(scanf("%d", &x)!=EOF)
{
p->data=x;
q=p;
p=(node *)malloc(sizeof(node));
p->next=NULL;
q->next=p;
}
printf("请上述数值中的某一个数:
");
scanf("%d", &x);
p=head;
while(p)//寻找x所在的位置
{
if(p->data==x) break;
else p=p->next;
}
printf("p结点的值为:%d
", p->data);
printf("p->next结点的值为:%d
", p->next->data);
printf("p->next->next结点的值为:%d
", p->next->next->data);
printf("请再输入一个与上述不同的值:
");
scanf("%d", &x);
q=head;
while(q)
{
if(q->data==x) break;
else q=q->next;
}
p->data=q->data; //注意该行的操作
printf("重新赋值后p结点的值为:%d
", p->data);
}
合法,p->next装的就是下一个链表的地址,所以下一个链表的地址里面也有next,所以p->next->next就是当前p指向的链表的后面第二个链表。
p->data = q->data是同一个类型,可以赋值,但对于所存内容是指针的应该小心使用。
经典算法--单链表选择排序第一种:
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}*Linklist,Node;
Linklist creat(int n)
{Linklist head,r,p;
int x,i;
head=(Node*)malloc(sizeof(Node));
r=head;
printf("输入数字:\n");
for(i=n;i>0;i--)
{scanf("%d",&x);
p=(Node*)malloc(sizeof(Node));
p->data=x;
r->next=p;
r=p;}
r->next=NULL;
return head;
} void output(Linklist head)
{Linklist p;
p=head->next;
do{
printf("%3d",p->data);p=p->next;
}while(p);
printf("\n");
} void paixu(Linklist head)
{Linklist p,q,small;int temp;
for(p=head->next;p->next!=NULL;p=p->next)
{small=p;
for(q=p->next;q;q=q->next)
if(q->data<small->data)
small=q;
if(small!=p)
{temp=p->data;
p->data=small->data;
small->data=temp;}
} printf("输出排序后的数字:\n");
output(head);
} void main()
{Linklist head;
int x,j,n;
printf("输入数字的个数(n):\n");
scanf("%d",&n);
head=creat(n);
printf("输出数字:\n");
output(head);
printf("已排序的数字:\n");
paixu(head);
}
第二种:
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}*Linklist,Node;
Linklist creat(int n)
{Linklist head,r,p;
int x,i;
head=(Node*)malloc(sizeof(Node));
r=head;
printf("输入数字:\n");
for(i=n;i>0;i--)
{scanf("%d",&x);
p=(Node*)malloc(sizeof(Node));
p->data=x;
r->next=p;
r=p;}
r->next=NULL;
return head;
} Linklist selectsort(Node *g)
{ Node *p,*q,*t,*s,*h;
h=(Node *)malloc(sizeof(Node));
h->next=g;
p=h;
while(p->next->next!=NULL)
{
for(s=p,q=p->next;q->next!=NULL;q=q->next)
if(q->next->data<s->next->data)
s=q;
if(s!=q)
{
t=s->next;
s->next=t->next;
t->next=p->next;
p->next=t;
}
p=p->next;
}
g=h->next;
free(h);
return g;
} void output(Linklist head)
{Linklist p;
p=head->next;
do{
printf("%3d",p->data);p=p->next;
}while(p);
printf("\n");
} void main()
{Linklist head;
int x,j,n;
printf("输入数字的个数(n):\n");
scanf("%d",&n);
head=creat(n);
printf("输出数字:\n");
output(head);
head=selectsort(head);
printf("已经排序的数字:\n");
output(head);
}
另外,团IDC网上有许多产品团购,便宜有口碑
合法
合法,没什么不合法的
绛旓細C99 閲16杩涘埗娴偣鏁拌鏁版硶銆傜被浼糆锛屼絾涓嶅悓銆傛暟浠0x寮澶(鏁板瓧0瀛楁瘝x),鐒跺悗鏄16杩涘埗娴偣鏁伴儴鍒嗭紝鎺ョ潃鏄p,鍚庨潰鏄互 2涓哄簳鐨勯樁鐮併備緥濡傦細0xb.1ep5 鍏朵腑锛歜.1e 鏄16杩涘埗娴偣鏁帮紝 涔樺悗闈㈢殑p5銆俻5 绛変簬 2鐨5娆℃柟锛10杩涘埗512锛夈傛墍浠ュ寲鎴愬崄杩涘埗锛(11+1/16.0+14/256.0) * 512.0銆
绛旓細p-璁℃暟娉曚娇鐢ㄥ墠缂0x锛屾帴鐫鏄崄鍏繘鍒舵暟锛岀劧鍚庢槸p锛屾渶鍚庢槸2鐨勬寚鏁般傚0xa.1fp10=10364.0銆俛鏄崄鍏繘鍒舵暟锛屾槸鍗佽繘鍒剁殑10锛.1f鏄1/16鍔犱笂15/256銆傚湪涔樹互p鍚庨潰鏄2鐨10娆℃柟銆
绛旓細C璇█涓璸->x鏄粨鏋勪綋鎸囬拡鍙橀噺p寮曠敤缁撴瀯浣撴垚鍛榵鐨勬柟寮忋傜粨鏋勪綋鎸囬拡鍙橀噺寮曠敤缁撴瀯浣撴垚鍛樼敤绠ご(->)闈炩濈粨鏋勪綋鎸囬拡鈥滃彉閲忓紩鐢ㄧ粨鏋勪綋鎴愬憳鐢ㄧ偣(.)濡傦細struct test { int x; char str[100];} ;struct test data={1,"test"}; //瀹氫箟涓涓粨鏋勪綋鍙橀噺Data锛屽苟鍒濆鍖杝truct test *p ; //瀹氫箟...
绛旓細c璇█涓闄勫姞鏍煎紡瀛楃p-3鏄痯鍚庨潰鏄2鐨3娆℃柟銆c璇█p-鏄疌99閲16杩涘埗娴偣鏁拌鏁版硶銆傜被浼糆锛屼絾涓嶅悓銆傛暟浠0x寮澶(鏁板瓧0瀛楁瘝x)锛屾槸16杩涘埗娴偣鏁伴儴鍒嗭紝鎺ョ潃鏄痯锛屽悗闈㈡槸浠2涓哄簳鐨勯樁鐮併
绛旓細C璇█涓璸->x鏄粨鏋勪綋鎸囬拡鍙橀噺p寮曠敤缁撴瀯浣撴垚鍛榵鐨勬柟寮忋傜粨鏋勪綋鎸囬拡鍙橀噺寮曠敤缁撴瀯浣撴垚鍛樼敤绠ご(->)锛岄潪鈥濈粨鏋勪綋鎸囬拡鈥滃彉閲忓紩鐢ㄧ粨鏋勪綋鎴愬憳鐢ㄧ偣(.)銆傛搷浣滄柟娉曞涓嬶細1銆侀鍏堝畾涔変竴涓汉鐨勭粨鏋勪綋銆傜粨鏋勪綋涓殑姣忎釜鎴愬憳閮介渶瑕佹寚鏄庣被鍨嬶紝濡備笂渚嬫墍绀猴紝濮撳悕涓篶har瀛楃绫诲瀷銆佸勾榫勪负int绫诲瀷锛岃韩楂樹负double绫诲瀷銆2銆...
绛旓細while(*p2) p2++; // 灏唒2绉诲姩鍒板瓧绗︿覆灏撅紝鍗虫寚鍚戠粨鏉熺0 p2--; // 鍥炵Щ锛宲2鎸囧悜瀛楃涓叉渶鍚庝竴涓瓧绗 浠g爜鐨勫姛鑳芥槸灏嗗瓧绗︿覆棣栧熬瀵瑰簲瀛楃渚濇浜ゆ崲
绛旓細p鏄粨鏋勪綋鍙橀噺锛宎djvex鏄粨鏋勪綋涓殑鎴愬憳鍙橀噺銆傜粨鏋勪綋鍜屾垚鍛樺彉閲忕殑鍏崇郴灏辩浉褰撲簬鐝富浠诲拰鐝骇鐨勫叧绯锛宲->adjvex灏辩浉褰撲簬鐝富浠籶璋冪敤瀛︾敓adjvex锛宲->adjvex = m鐨勬剰鎬濆氨鏄妸m鐨勫肩粰p涓殑鎴愬憳鍙橀噺adjvex銆
绛旓細p->num灏辨槸p.num鐨勬剰鎬濓紝鎰忎负p鐨刵um鎴愬憳锛屽氨鏄痭um杩欎釜鍊艰祴鍊肩粰p鐨刵um鎴愬憳銆
绛旓細缁撴瀯浣撶殑鎸囬拡鐨p->num琛ㄧずnum鐨勫硷紝杩欎釜寰堝鏄撶悊瑙c傝岀粨鏋勪綋鏁扮粍鐨勬寚閽堬紝鍏跺疄灏卞儚鏁扮粍鐨勫悕绉颁竴鏍凤紝鍧囪〃绀鸿鏁扮粍鐨勮捣濮嬪湴鍧銆傛墍浠->num涔熻〃绀簄um鐨勫硷紝鍙槸琛ㄧず鐨勬槸鏁扮粍涓涓涓粨鏋勪綋涓璶um鐨勫笺傝繖鏍疯涓嶇煡閬撲綘鏄庣櫧鍚楋紵锛
绛旓細娌℃湁P-鐨勫暒锛屽彧鏈夎繖鏍稰--鎴栬--P P--浠h〃鍏堣祴鍊肩粰鍙橀噺锛岀劧鍚庤嚜宸卞啀鍑忓幓1锛--P浠h〃鑷繁鍑忓幓1锛屽啀璧嬪肩粰鍙橀噺锛