永发信息网

C编程中的链表的问题!

答案:1  悬赏:50  手机版
解决时间 2021-05-09 11:52
那位高手帮我写个C程序:在链表中有两个记录:username和password。从键盘分别输入两个字符串,跟链表中的两个记录对比,如果在链表能找到相同的,则输出“success!”否则输出:“error!”
最佳答案

遵照您的意思,我写出了如下代码


#include <stdlib.h>
#include <stdio.h>



//定义链表节点


typedef struct Node
{
char username[16];
char password[16];
Node* next;
} _NODE;


//初始化链表


void InitLink(Node* head, char* username, char* password)
{
memcpy(head->username, username, strlen(username));
memcpy(head->password, password, strlen(password));
head->next = NULL;
}


//向链表添加节点


void AddNode(Node* head, Node node)
{
Node* newnode = (Node*)malloc(sizeof(Node));
memset(newnode, 0, sizeof(Node));
memcpy(newnode, &node, sizeof(Node));
Node* temp = head;
while(temp->next)
{
temp = temp->next;
}
temp->next = newnode;
}


//释放链表


void FreeLink(Node* head)
{
Node* temp = head;
while(head->next)
{
temp = head->next;
free(head);
head = temp;
}
}


//显示链表


void ShowLink(Node* head)
{
Node* temp = head;
while(temp)
{
printf("[%s, %s]\n-->", temp->username, temp->password);
temp = temp->next;
}
printf("NULL\n");
}


//判断字符串是否相同


bool StrEqual(char* str_left, char* str_right)
{
if(strlen(str_left) != strlen(str_right))
return false;
else
{
int i=0;
while(str_left[i])
{
if(str_left[i] != str_right[i])
{
return false;
}
i ++;
}
return true;
}
}


//查找用户名和密码


bool FindUnamePsd(Node* head, char* username, char* password)
{
Node* temp = head;
while(temp)
{
if(StrEqual(username, temp->username) && StrEqual(password, temp->password))
{
return true;
}
temp = temp->next;
}
return false;
}


void main()
{
int i;
Node* head = (Node*)malloc(sizeof(Node));
memset(head, 0, sizeof(Node));
char* username = "username";
char* password = "password";
InitLink(head, username, password);


//添加5个测试节点
for(i=0; i<5; i++)
{
Node temp = {0};
temp.next = NULL;
memcpy(temp.username, username, strlen(username));
memcpy(temp.password, password, strlen(password));
temp.username[strlen(username)] = i+48;
temp.password[strlen(password)] = i+48;
AddNode(head, temp);
}
printf("Please enter two strings\n");
char username_enter[16] = {0};
char password_enter[16] = {0};
scanf("%s%s", username_enter, password_enter);
if(FindUnamePsd(head, username_enter, password_enter))
{
printf("success!\n");
}
else
{
printf("error!\n");
}
//ShowLink(head);
FreeLink(head);
}



如果有不明白的地方请追问。


谢谢采纳!

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
网络的爱情,可信度是百分多少?
请给我可以下到U盘中的(不用上网的)游戏。
索尼爱立信W910i有什么软件
大话2致命连击魔
我的DNF更新速度是0?
第七题和第八题怎么写?
佰乐吉超市我想知道这个在什么地方
冒险岛6Y28G信玄多少钱
骂寝室管理员的检讨怎么写啊
ghost软件下载地址
炫舞图片怎么截到自己的相册?
QQ群主可以设置多少个群管理员?
火箭明天完爆国王?
有什么办法把不是自己好友来农场偷东西的混蛋
古风诗歌原创,描写景色的古风诗词
推荐资讯
无锡车管所网上选号苏B97M97还有吗
玩魔兽争霸死机
辩论“错过比失去更心痛”怎样展开
云龙山庄怎么去啊,有知道地址的么
南京大厂的有人买房子吗?
补充完整,中文翻译成英语:1.我听到有人在叫我
非续订开通是不是只扣一次钱
社区经验怎么增加
无法找到入口啊 怎么办啊!
现代多少钱
谁有MG命运高达1:100的零件
彩虹岛副本怎么弹出来?无法停留在副本.自动返
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?