java链表实现二维数组_C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)...

#include "stdio.h"#include#include"string.h"typedefstructNAME{char *name;struct NAME *preced; //上个name链表成员

struct NAME *next; //下个name链表成员}T_NAME,*PT_NAME;

PT_NAME g_ptNameListHead=NULL; //链表头

voidadd_LinkList(PT_NAME nameNew)

{

PT_NAME ptTamp;int i=0;if(g_ptNameListHead==NULL) //第一次添加链表{

g_ptNameListHead=nameNew;return;

}else{

ptTamp=g_ptNameListHead;while(ptTamp->next) //下个链表成员是否为空{

ptTamp=ptTamp->next;

}

ptTamp->next=nameNew; //添加下个链表成员

nameNew-> preced= ptTamp; //在下个链表成员里添加上个链表

return;

}

}void add_name(charstr[])

{

PT_NAME ptTamp;char *p;

p=(char *)malloc(strlen(str));

strcpy(p,str);

ptTamp=(PT_NAME)malloc(sizeof(T_NAME));

ptTamp->name=p;

ptTamp-> preced=NULL;

ptTamp-> next=NULL;

add_LinkList(ptTamp);//添加链表}/*从链表里找到name位置*/PT_NAME find_name(charstr[])

{

PT_NAME ptTamp;if(g_ptNameListHead==NULL)returnNULL;

ptTamp=g_ptNameListHead;while(ptTamp)

{if(strcmp(ptTamp->name,str)==0) //find{returnptTamp;

}elseptTamp=ptTamp->next;

}returnNULL;

}int del_name(charstr[])

{

PT_NAME ptTamp;

PT_NAME ptLast;

PT_NAME ptNext;

ptTamp=find_name(str);if(!ptTamp)return -1;if(ptTamp==g_ptNameListHead) //若去掉的是链表头{

g_ptNameListHead=ptTamp->next; //指向下个链表成员}else{/*获取上个链表成员和下个链表成员*/ptLast=ptTamp->preced;

ptNext=ptTamp->next ;/*去掉当前链表成员*/ptLast->next=ptNext;

ptNext->preced=ptLast;

}

free(ptTamp->name);

free(ptTamp);return 0;

}void List_name(void)

{int i=0;

PT_NAME ptTamp=g_ptNameListHead;while(ptTamp)

{

printf(" %s\n",i,ptTamp->name);

ptTamp=ptTamp->next;

i++;

}

}void scanf_name(charcmd)

{char name[128];switch(cmd)

{case 'a': //add{

printf("please enter name:\n");

scanf("%s",name);

add_name(name);

printf("add %s OK\n",name);break;

}case 'd': //del{

printf("please enter name:\n");

scanf("%s",name);if(del_name(name)<0)

{

printf("del %s error\n",name);

}elseprintf("del %s OK\n",name);break;

}case 'l': //listList_name();break;

}

}int main(int argc, char **argv)

{charc;while(1)

{

printf("**********************\n");

printf(" List all the names\n");

printf(" add one name\n");

printf(" del one name\n");

printf(" quit\n");

printf("**********************\n");do{

scanf("%c",&c);

}while(c!='a'&&c!='d'&&c!='q'&&c!='l');switch(c)

{case 'a':case 'l':case 'd':scanf_name(c); break;case 'q':return 0;default : break;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给你提供一个小游戏的框架,你可以在此基础上实现链表指针、结构体、二维数组和文件操作。这个游戏是猜数字游戏,玩家需要在规定次数内猜出系统随机生成的数字。以下是代码: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> // 定义链表结构体 typedef struct node { int score; struct node *next; } Node; // 初始化链表 Node *init_list() { Node *head = (Node*)malloc(sizeof(Node)); head->score = 0; head->next = NULL; return head; } // 插入链表 void insert_list(Node *head, int score) { Node *p = head; while (p->next != NULL) { p = p->next; } Node *new_node = (Node*)malloc(sizeof(Node)); new_node->score = score; new_node->next = NULL; p->next = new_node; } // 输出链表 void print_list(Node *head) { Node *p = head->next; while (p != NULL) { printf("%d ", p->score); p = p->next; } printf("\n"); } int main() { srand(time(NULL)); // 用时间做种子,使得每次生成的随机数不同 int answer = rand() % 100; // 产生 0-99 的随机数 int guess, count = 0, max_count = 10; // 最多猜 10 次 Node *score_list = init_list(); // 初始化链表 printf("猜数字游戏开始!\n"); while (count < max_count) { printf("请输入一个 0-99 的整数:"); scanf("%d", &guess); count++; if (guess == answer) { printf("恭喜你猜对了!你一共猜了 %d 次。\n", count); insert_list(score_list, count); // 插入链表 break; } else if (guess < answer) { printf("猜小了!\n"); } else { printf("猜大了!\n"); } } if (count == max_count) { printf("很遗憾你没有在规定次数内猜出正确答案,答案是:%d\n", answer); } printf("历史最佳成绩:"); print_list(score_list); // 输出链表 // 将链表保存到文件中 FILE *fp = fopen("score.txt", "w"); Node *p = score_list->next; while (p != NULL) { fprintf(fp, "%d ", p->score); p = p->next; } fclose(fp); return 0; } ``` 这个代码中用到了链表指针、结构体、二维数组和文件操作的知识点。你可以自行实现这些功能,加强自己的编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值