求链表中第i个结点的指针(函数),若不存在,则返回NULL。怎么编写?

\u7528C\u7f16\u5199\u4e00\u4e2a\u51fd\u6570Create()\uff0c\u8be5\u51fd\u6570\u53ef\u4ee5\u7528\u4e8e\u521b\u5efa\u4e00\u4e2a\u94fe\u8868\uff0c\u94fe\u8868\u4e2d\u7684\u7ed3\u70b9\u5305\u62ec\u5b66\u53f7\u3001\u6210\u7ee9\uff0c\u5177\u6709\u53cc\u5411\u6307\u9488

/*
\u5b66\u751f\u7684\u5b66\u53f7 : 5670
\u5b66\u751f\u7684\u6210\u7ee9 : 999
\u5b66\u751f\u7684\u6210\u7ee9 : 90
05670 90

\u8bf7\u6309\u4efb\u610f\u952e\u7ee7\u7eed. . .
*/
#include
#include
#include

typedef struct node {
char id[6];
short score;
struct node *next;
}*Node,*LinkList;

// \u53bb\u9664id\u4e2d\u7684\u975e\u6570\u5b57\u5b57\u7b26\uff0c\u5982\u679cid\u957f\u5ea6\u5927\u4e8eslen\uff0c\u53ea\u53d6\u7528\u524dslen\u4e2a\uff0c
// \u5982\u679c\u4e0d\u8db3slen\u4e2a\u5b57\u7b26\uff0c\u5219\u5728\u524d\u7aef\u6dfb\u52a0\u5b57\u7b26'0'\u3002
char *StId(char *id, int slen) {
char *q,*p = id;
int i,len = strlen(id);
for(i = 0; p[i]; ++i) { // \u5220\u9664\u975e\u6570\u5b57\u5b57\u7b26
if((p[i] '9')) {
q = p + i;
while(*q = *(q + 1)) ++q;
--i;
}
}
if(len >= slen) id[slen] = '\0'; // \u622a\u53d6
else { // \u957f\u5ea6\u4e0d\u8db3\u5219\u586b'0'
for(i = 0; i <= len; ++i) // \u5f80\u540e\u79fb\u52a8
id[slen - i] = id[len - i];
for(i = 0; i < slen - len; ++i) // \u586b\u5145\u5b57\u7b26'0'
id[i] = '0';
}
return id;
}

int StScore(char *s, int min, int max) {
char *q,*p = s;
int i,num = 0;
for(i = 0; p[i]; ++i) { // \u5220\u9664\u975e\u6570\u5b57\u5b57\u7b26
if((p[i] '9')) {
q = p + i;
while(*q = *(q + 1)) ++q;
--i;
}
}
for(i = 0; p[i]; ++i) num = 10 * num + p[i] - '0';
if((num max)) return -1;
return num;
}

LinkList CreateList(int n) { // \u521b\u5efa\u5355\u5411\u975e\u5faa\u73af\u94fe\u8868
LinkList head;
char s[20];
Node p,q;
head = p = (LinkList)malloc(sizeof(node));
for(int i = 0;i < n;i++) {
q = (LinkList)malloc(sizeof(node));
printf("\u5b66\u751f\u7684\u5b66\u53f7 : ",i + 1);
scanf("%s",s);
strcpy(q->id,StId(s,5));
do {
printf("\u5b66\u751f\u7684\u6210\u7ee9 : ",i + 1);
scanf("%s",s);
q->score = StScore(s,0,100);
}while(q->score == -1);
p->next = q;
p = q;
}
p->next = NULL;
return head;
}

void PrintList(LinkList head) {
Node p = head->next;
while(p) {
printf("%s\t%d\n",p->id,p->score);
p = p->next;
}
printf("\n");
}
int main() {
LinkList head = CreateList(1);
PrintList(head);
return 0;
}

typedef struct node //\u94fe\u8868\u4e2d\u7684\u7ed3\u70b9\u6570\u636e\u7ed3\u6784
{
int data;
struct node *next;
} node,*pnode;

pnode nodi_add(pnode head,int i)//\u8fd4\u56de\u7b2ci\u4e2a\u7ed3\u70b9\u7684\u6307\u9488\uff0c\u5982\u679c\u4e0d\u5b58\u5728\uff0c\u5c31\u8fd4\u56deNULL
{
pnode a=head;
while (--i&&a)
a=a->next;
return a;
}

#include<stdio.h>
#include<malloc.h>

typedef struct node
{
int data;
struct node *next;
}node;

node *head,*p1,*p2;

/*建链表*/

void creat()
{ int i;

head=p1=(node*)malloc(sizeof(node));

for(i=0;i<30;i+=2)
/*已知带头节点的单链表L中的结点是按整数值递增排列的(就赋0-28所有偶数了

)*/
{
p2=(node*)malloc(sizeof(node));
p2->data=i;
p1->next=p2;
p1=p2;
}
p1->next=NULL;
}

/*插入结点*/

void insert(node* temp)
{ p1=head->next;
p2=head;
while(p1!=NULL&&(temp->data)>(p1->data))
{
p2=p1;
p1=p2->next;
}
if(p1!=NULL)
{
temp->next=p1;
p2->next=temp;
}
else
{
p2->next=temp;
temp->next=NULL;

}
}

/*输出链表*/
void print()
{

p1=head->next;
while(p1!=NULL)
{
printf("%d->",p1->data);

p1=p1->next;
}
printf("\n");
}

/*主函数*/
int main()
{ node *temp;

creat();
printf("原链表为:\n");
print();
temp=(node*)malloc(sizeof(node));
printf("输入要插入的值\n");
scanf("%d",&temp->data);
insert(temp);
printf("插入结点后链表为:\n");
print();
return 0;
}

#include<stdio.h>
#include<malloc.h>

typedef struct node
{
int data;
struct node *next;
}node;

node *head,*p1,*p2;

/*建链表*/

void creat()
{ int i;

head=p1=(node*)malloc(sizeof(node));

for(i=0;i<30;i+=2)
/*已知带头节点的单链表L中的结点是按整数值递增排列的(就赋0-28所有偶数了

)*/
{
p2=(node*)malloc(sizeof(node));
p2->data=i;
p1->next=p2;
p1=p2;
}
p1->next=NULL;
}

/*插入结点*/

void insert(node* temp)
{ p1=head->next;
p2=head;
while(p1!=NULL&&(temp->data)>(p1->data))
{
p2=p1;
p1=p2->next;
}
if(p1!=NULL)
{
temp->next=p1;
p2->next=temp;
}
else
{
p2->next=temp;
temp->next=NULL;

}
}

/*输出链表*/
void print()
{

p1=head->next;
while(p1!=NULL)
{
printf("%d->",p1->data);

p1=p1->next;
}
printf("\n");
}

/*主函数*/
int main()
{ node *temp;

creat();
printf("原链表为:\n");
print();
temp=(node*)malloc(sizeof(node));
printf("输入要插入的值\n");
scanf("%d",&temp->data);
insert(temp);
printf("插入结点后链表为:\n");
print();
return 0;
}

单链表插入一个值后有序排列

#include<stdio.h>
#include<malloc.h>
struct node{
int key;
struct node *next;
};
void creat_link(struct node *);
main()
{
struct node *head=NULL;
creat_link(head);
}
void creat_link(struct node *head_node)
{
struct node *p,*q,*Temp;
int number;
printf("Please input data:[-1 is End]\n");
scanf("%d",&number);
while(number!=-1){
q=(struct node *)malloc(sizeof(struct node));
q->key=number;
if(head_node==NULL ){
head_node=q;
p=q;
}
else{
p->next=q;
p=q;
}
scanf("%d",&number);
}
p->next=NULL;
Temp=head_node;
while(Temp!=NULL){
printf("%d\n",Temp->key);
Temp=Temp->next;
}
}

  • 璇曠紪鍐欎竴涓绠楀ご缁撶偣鎸囬拡涓篖鐨鍗閾捐〃闀垮害鐨勭畻娉曘
    绛旓細p=L;len=0;while(p->next){ len++;p=p->next;} len鍗充负閾捐〃闀垮害
  • c璇█鐨鏁版嵁缁撴瀯涓,next鏄浣曟寚鍚戜笅涓涓厓绱犵殑?
    绛旓細鍦鍑芥暟涓笉鏄湁q->next=p锛涜繖鏃秖鏄彃鍏ュ墠鐨勫熬鑺傜偣銆傞偅鏍穛鐨勭殑涓嬩竴涓紙鏂版彃鍏ョ殑鑺傜偣锛夊氨鐢眖鎸囧悜鑺傜偣閲岀殑瀛楁next鎸囧悜浜嗐傚崟閾捐〃鐨勬彃鍏ュ彧闇璁﹕->next 鍜宲->next鐨勬寚閽鍋氫竴鐐规敼鍙樺嵆鍙俿->next = p->next;p->next = s;鍗曢摼琛绗琲涓鏁版嵁鎻掑叆缁撶偣鐨绠楁硶鎬濊矾鏄細1銆佸0鏄庝竴涓寚閽坧鎸囧悜閾捐〃鐨勭...
  • 閾捐〃搴旂敤:宸茬煡闈炵┖绾挎閾捐〃绗涓涓摼缁撶偣鐨勬寚閽涓簂ist,鍐欏嚭涓嬪垪鍚勯」鎿嶄綔...
    绛旓細for(i=0;i<=4;i++){ scanf("%d",&num);ptr->data=num;head=(link)malloc(sizeof(node));head->next=ptr;ptr=head;} ptr=ptr->next;while(ptr!=NULL){ printf("The value is ==>%d\n",ptr->data);ptr=ptr->next;}} (2)妫娴嬪埌涓篸ata,鍒欐妸涓婁竴鎸囬拡鎸囧悜浠栨墍鎸囩殑鍗曞厓锛屽嵆鎶...
  • C璇█,璁$畻閾捐〃涓鍏冪礌鑺傜偣涓釜鏁
    绛旓細/* 浜х敓澶磋妭鐐癸紝骞朵娇L鎸囧悜姝ゅご鑺傜偣 */if(!*L) /* 鍐呭瓨鍒嗛厤澶辫触 */exit (OVERFLOW);(*L)->next = NULL; /* 鎸囬拡鍩熶负绌 */}/* 鍗閾捐〃鎸囧畾浣嶇疆鎻掑叆鏂板厓绱 *//* 鎿嶄綔缁撴灉锛氬湪甯﹀ご缁撶偣鐨鍗曢摼琛↙涓i涓浣嶇疆涔嬪墠鎻掑叆鍏冪礌e */status listInsertNode (linkList L, int i, elemType e) {...
  • 鍏充簬c璇█閾捐〃鍑芥暟
    绛旓細=NULL&&j<i) { p=p->next ; //褰撳墠缁撶偣p涓嶆槸绗琲涓笖p闈炵┖锛屽垯p绉诲悜涓嬩竴涓粨鐐 j++; } return p;}//鎻掑叆杩愮畻瀛鍑芥暟void Insert_LinkList(LinkList L,int i,DataType x) //鍦ㄥ崟閾捐〃L涓i涓浣嶇疆鎻掑叆鍊间负x鐨勬柊缁撶偣{ LNode *p,*s; p =Get_LinkList(...
  • 閾捐〃涓澶鎸囬拡鏄惁鏄涓涓粨鐐?鏄笉鏄?
    绛旓細涓涓粨鐐归氬父鍒嗕袱閮ㄥ垎鎴愬憳 1銆佹暟鎹垚鍛 2銆佹寚閽堟垚鍛 閾捐〃涓涓涓粨鐐规槸澶寸粨鐐癸紝瀹冧竴鑸笉瀛樻斁鏁版嵁锛屽彧鏄娇鐢ㄨ鑺傜偣鐨勬寚閽鎴愬憳 杩欎釜鎸囬拡鎴愬憳鐢ㄦ潵瀛樻斁澶存寚閽 涔熷氨鏄澶存寚閽堟槸閾捐〃涓殑澶寸粨鐐逛篃灏辨槸绗竴涓粨鐐圭殑鍦板潃 澶寸粨鐐瑰悗闈㈢殑绗竴涓粨鐐规槸绗竴涓湁鏁堣妭鐐癸紝瀛樻斁鏁版嵁鏄粠杩欎釜鏈夋晥缁撶偣寮濮嬬殑 杩欎釜鏈夋晥...
  • 鍗閾捐〃鐨浣跨敤 鍐欎竴涓猰ain鍑芥暟,鎶婂崟閾捐〃鐨勫熀鏈搷浣滈兘鐢ㄤ竴閬,骞舵妸缁撴灉杈...
    绛旓細return i;} /* 鍒濆鏉′欢锛氶『搴忕嚎鎬ц〃L宸插瓨鍦紝1鈮鈮istLength(L) *//* 鎿嶄綔缁撴灉锛氱敤e杩斿洖L涓i涓鏁版嵁鍏冪礌鐨勫 */ Status GetElem(LinkList L,int i,ElemType *e){ int j;LinkList p; /* 澹版槑涓缁撶偣p */ p = L->next; /* 璁﹑鎸囧悜閾捐〃L鐨勭涓涓粨鐐 */ j = 1; /*...
  • 鍦ㄥ叿鏈夊ご缁撶偣鐨閾惧紡瀛樺偍缁撴瀯涓,澶鎸囬拡鎸囧悜閾捐〃涓殑绗涓涓暟鎹粨鐐?
    绛旓細鏈夊ご缁撶偣鐨勯摼琛ㄧ粨鏋勪腑锛屽ご鎸囬拡鎸囧悜閾捐〃鐨澶寸粨鐐癸紝鍥犱负鍗曢摼琛ㄤ笉鍏锋湁鍥炴函鎬э紝鍗抽氳繃鎸囬拡鎸囧悜鐨勮妭鐐逛笉鑳芥壘鍒拌鑺傜偣鐨勫墠涓涓妭鐐癸紝鍙兘鎵惧埌鍚庨潰鐨勮妭鐐广傜洰鐨勬槸渚夸簬閾捐〃鐨勬搷浣滐紱姣斿鍒犻櫎绗竴涓暟鎹妭鐐规椂锛岃澶缁撶偣鐨勬寚閽鍩熸寚鍚戠浜屼釜鏁版嵁鑺傜偣鍗冲彲銆傚鏋滃ご鎸囬拡鎸囧悜鐨勬槸绗竴涓暟鎹妭鐐癸紝閭d箞閫氳繃姝ゆ寚閽堜笉鑳芥壘鍒板墠...
  • 寤虹珛涓涓甫澶缁撶偣鐨鍗閾捐〃,鍒犻櫎鍏朵腑鐨勭i涓鍏冪礌銆
    绛旓細寤虹珛涓涓甫澶缁撶偣鐨鍗閾捐〃锛屽垹闄ゅ叾涓鐨勭i涓鍏冪礌锛氳繖涓ご鑺傜偣鏄竴涓┖鑺傜偣锛堜笉瀛樺偍鏁版嵁锛夛紝浠呬綔鏍囧織鐢ㄣ傚厛鍋囪鏄崟鍚戦潪寰幆鍒楄〃銆倂oid deleteNode(Node * head, int i)//鍒犻櫎绗琲涓妭鐐癸紝head鏄涓涓妭鐐鎸囬拡銆倇 Node * temp=head;for(int j=1;j<i;j++){ if(!temp->next) //鍒拌揪閾捐〃...
  • 璁捐涓涓湪涓嶅甫澶缁撶偣鐨勯摼琛ㄧ殑绗琲涓鍏冪礌涔嬪墠鎻掑叆涓涓厓绱犵殑绠楁硶銆傛眰楂樻墜...
    绛旓細ElemType data; // 鏁版嵁鍩 struct Lnode *next; // 鎸囬拡鍩 } LNode;typedef LNode * LinkList; //鍗曢摼琛ㄧ被鍨 Status ListInsert_L(LinkList &L, int i, ElemType e) { // L 涓轰笉甯﹀ご缁撶偣鐨鍗曢摼琛ㄧ殑澶存寚閽堬紝鍦閾捐〃涓i 涓粨鐐涔嬪墠鎻掑叆鏂扮殑鍏冪礌 e LNode *p = L;int j...
  • 扩展阅读:双向链表中有两个指针 ... 在单循环链表中设置尾指针 ... 链表中指针表示的是 ... 链表中的指针域是什么 ... 链表的指针域存放的是 ... 将a的首地址赋会指针变量p ... 在单链表的指针为p ... 在双向链表指针p的结点 ... 在链表中指针p所指结点 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网