In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-03-27 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >
Share
Shulou(Shulou.com)06/02 Report--
This article mainly explains "C language pointer and linked list example analysis", interested friends may wish to take a look. The method introduced in this paper is simple, fast and practical. Now let the editor to take you to learn "C language pointer and linked list example analysis" bar!
The application of pointers and linked lists is directly related to the last management system, and the management system without adding linked lists and pointers can not find them accurately. Data storage is also inconvenient. So pointers and linked lists can point directly to the data address you need, making the program more perfect. This time I made use of the pointer application to create a program to manage employee salary and other information.
First of all, the most important definitions and basic functions:
# include
# include
# include
# include
Typedef struct Node Node
/ / define salary information node
/ / basic salary, task salary, expenditure and actual salary respectively
Struct Score
{
Int ji,ren,zhi,sum
}
/ / define employee information node
/ / name, job number, age, salary and pointer to the next node, respectively
/ / four global variables, header node, and temporary node variables are defined.
Struct Node
{
Char name [20], num [20], age [20]
Struct Score score
Struct Node* next
} * head,*u,*p,*q
/ / define the number of employees and the high and average salary levels of multiple employees
Int n,C,M,E,Cj,Cy,Mj,My,Ej,Ey
Char num [20]
Remember, you must first define the desired node and make a pointer to the next node so that the pointer can play its role.
This time I made the start menu of the program to prevent me from forgetting:
Void Welcome ()
{
Printf ("\ t\ t #\ n")
Printf ("\ t\ t # Welcome to use the employee payroll management system #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 1. Read file #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 2. Save the file #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 3. Add employee salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 4. Modify employee salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 5. Delete employee salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 6. Query personal salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 7. Query undergraduate salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 8. Query company salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 9. Exit the management system #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t #\ n\ n")
Printf ("\ t\ t Please enter instruction: (1-9)")
}
The next step is to create a node information and make a program to enter employee information. The most important thing is not to forget to make a function pointing to the next node again:
Node* new_node (Node* uu)
{
Uu = (Node*) malloc (sizeof (Node))
Uu- > next = NULL
Return uu
}
/ / add employee information
Void Add ()
{
/ / create a new node
U = new_node (u)
Printf ("\ nPlease enter the information of the employee you want to join:\ n")
Printf ("\ nname:")
Scanf ("% s", u-> name)
Printf ("\ nJob number:")
Scanf ("% s", u-> num)
Printf ("\ nAge:")
Scanf ("% s", u-> age)
Printf ("\ nBase salary, task salary, expenses:")
Scanf ("% d%d%d", & u-> score.ji,&u- > score.ren,&u- > score.zhi)
/ / calculate the actual wage
U-> score.sum = u-> score.ji + u-> score.ren-u-> score.zhi
/ / insert the tail pointer of the new node to the second node
U-> next = head- > next
/ / put the new node behind the head node
Head- > next = u
Printf ("\ nMusi-> added successfully!\ n")
}
After this step, even if the foundation of our entire program is laid, the next step is to slowly produce some practical instructions we need, such as: modify and delete.
Void Mod ()
{
N = 0
Printf ("\ nPlease enter the work number you want to modify:")
Scanf ("% s", num)
For (u = head; u! = NULL;u = u-> next)
{
If (strcmp (u-> num,num) = = 0)
{
N = 1
Printf ("\ nPlease enter new base salary, task salary, expense:")
Scanf ("% d%d%d", & u-> score.ji,&u- > score.ren,&u- > score.zhi)
U-> score.sum = u-> score.ji + u-> score.ren-u-> score.zhi
Printf ("\ nMusi-> modified successfully!\ n")
Break
}
}
If (! n)
Printf ("\ nMurray-> has no information about this employee!\ n")
}
The theoretical idea to do this is to let the program look for a node, and if you find the node you need, you can generate an updatable function program here.
Void Del ()
{
N = 0
Printf ("\ nPlease enter the student number of the employee you want to delete:")
Scanf ("% s", num)
For (u = head; u! = NULL;u = u-> next)
{
If (strcmp (u-> num,num) = = 0)
{
N = 1
P-> next = u-> next
Free (u)
Printf ("\ nMusi-> deleted successfully!\ n")
Break
}
P = u
}
If (! n)
Printf ("\ nMurray-> has no information about this employee!\ n")
}
The principle of deletion is similar to that of changes, that is, you can delete the desired node when it is found. There are no new operations.
After adding, deleting and modifying, we need to integrate the information because it is salary management, and sort it by work number according to what we need, so the next program is to solve this problem:
N = 0
For (u = head- > next; u! = NULL;u = u-> next)
Nasty +
For (iTun1)
If (strcmp (p-> num,q- > num) > 0 | | strcmp (p-> num,q- > num) = = 0 & & p-> score.sum
< q->Score.sum)
{
U-> next = Q
P-> next = Q-> next
Q-> next = p
}
U = u-> next
}
}
}
In this way, the circular comparison of the program can be arranged in ascending order according to the work number and the salary information can be listed.
After the full list, there is a personal information search program that allows employees to use the program to find their own information quickly:
/ / find a certain employee's score by work number
Void Que_One ()
{
/ / Mark variable to record whether the search is successful
N = 0
Printf ("\ nPlease enter the work number of the employee you want to query:")
Scanf ("% s", num)
/ / traverse from the second node to the last node
For (u = head- > next; u! = NULL;u = u-> next)
{
/ / if the work number of the current node is the same as the work number you are looking for, this employee information is output.
If (strcmp (u-> num,num) = = 0)
{
N = 1
Printf ("\ n")
Puts ("Age, name, basic salary, Task wage, payroll, actual wage")
Printf ("%-11s%-15s", u-> age,u- > name)
Printf ("%-6d%-6d%-6d%-6d\ n", u-> score.ji,u- > score.ren,u- > score.zhi,u- > score.sum)
Break
}
}
If (! n)
Printf ("\ nMurray-> has no information about this employee!\ n")
}
Once again, it is very convenient to use the loop to let the program pick out the program you want to find and show all the information about the employee.
After this is the summary of the whole company, different jobs of employees will make wages different, from which the proportion of employees with higher and lower wages will be calculated to determine the future development of the company.
Void Analyze_Sco (Node * uu)
{
/ / A pair of nodes found to calculate the average wages
/ / ask for high wage rate and lower wage rate
C + = uu- > score.ji
M + = uu- > score.ren
E + = uu- > score.zhi
If (uu- > score.ji > = 1000)
Cj++
If (uu- > score.ji > = 5000)
Cy++
If (uu- > score.ren > = 500)
Mj++
If (uu- > score.ren > = 1000)
My++
}
/ / print the average wage, high wage rate and low wage rate
Void Print_Sco ()
{
Printf ("basic average wage:%-6.2f, lower wage rate:%-6.2f, high wage rate:%-6.2f.\ n\ n", (float) 100*Cj/n, (float) 100*Cy/n)
Printf ("average wage for tasks:%-6.2f, lower wage rate:%-6.2f, high wage rate:%-6.2f.\ n\ n", (float) 100*Mj/n, (float) 100*My/n)
}
In order to confirm the number of new and old employees in the company to judge the possible development of the company, it is also necessary to arrange the age stage information:
Void Que_Cla ()
{
/ / sort a pair of linked list nodes
Sort ()
N = C = M = E = Cj = Cy = Mj = My = 0
Printf ("\ nPlease enter the age you want to query:")
Scanf ("% s", num)
Printf ("\ n")
For (u = head- > next; u! = NULL;u = u-> next)
{
/ / employees who are not of that age will skip
If (strcmp (u-> age,num))
Continue
/ / print head information if it is the first employee
If (! n)
Puts ("Age, name, basic salary, Task wage, payroll, actual wage")
Nasty +
Printf ("%-11s%-15s", u-> age,u- > name)
Printf ("%-6d%-6d%-6d%-d\ n", u-> score.ji,u- > score.ren,u- > score.zhi,u- > score.sum)
Analyze_Sco (u)
}
If (! n)
{
Printf ("No employee information of this age!\ n")
Return
}
/ / print the characteristic values of each salary of employees of this age.
Printf ("\ nThere are% d employees in this age group.\ n\ n", n)
Print_Sco ()
}
In the production of these programs is for convenience can also make printing auxiliary programs, to help to implement.
The last step is to save and re-read the data you entered or modified:
Void Save ()
{
Char c
Printf ("\ nconfirm save? (y _ N):")
Scanf ("% * c% c" & c)
If (c = ='N')
Return
FILE * fp
If ((fp=fopen ("C:\\ data.txt", "w")) = = NULL)
{
Printf ("\ nMurray-> cannot open the file\ n")
Return
}
/ / write data header information
Fputs ("Age, work number, name, basic salary, Task wage, payroll, actual wage", fp)
If (head- > next! = NULL)
Fputs ("\ n", fp)
/ / write files in turn from the beginning node
For (u = head- > next; u! = NULL;u = u-> next)
{
Fprintf (fp, "%-11s%-11s%-15s", u-> age,u- > num,u- > name)
Fprintf (fp, "%-6d%-6d%-6d%-d", u-> score.ji,u- > score.ren,u- > score.zhi,u- > score.sum)
If (u-> next! = NULL)
Fprintf (fp, "\ n")
}
Fclose (fp)
Printf ("\ nMurray-> score was successfully deposited in C:\ data.txt\ n")
}
/ / read the file
Void Open ()
{
Printf ("\ nPlease put the data in the directory C:\ data.txt and press any key to confirm.\ n")
Getch ()
FILE * fp
/ / read files from the root directory of disk c
If ((fp=fopen ("C:\\ data.txt", "r")) = = NULL)
{
Printf ("\ nMutual-> file not found!\ n")
Return
}
Char tmp [100]
/ / read 65 menu header characters and store them in the tem character array
Fgets (tmp,66,fp)
/ / read to jump out of the loop at the end of the file
While (! feof (fp))
{
U = new_node (u)
Fscanf (fp, "% s%s%s", u-> age,u- > num,u- > name)
Fscanf (fp, "% d%d%d%d", & u-> score.ji,&u- > score.ren,&u- > score.zhi,&u- > score.sum)
/ / create a linked list by plug-in
U-> next = head- > next
Head- > next = u
}
Printf ("\ nMutual-> score read successfully!\ n")
Fclose (fp)
}
/ / exit the program
Void Exi ()
{
Char c
Printf ("\ nconfirm exit? (y _ N):")
Scanf ("% * c% c" & c)
If (c = ='N')
Return
/ / print the concluding remarks
System ("cls")
Printf ("\ n\ n")
Printf ("\ t\ t\ t% c% c\ n")
Printf ("\ t\ t\ t% c Thank you for using% c\ n", 4jin4)
Printf ("\ t\ t\ t% c% c\ n")
Printf ("\ t\ t\ t Thank you!\ n\ n\ n")
Exit (0)
}
Int main ()
{
/ / variables that store instructions
Int orz
/ / set the system text color
System ("color 0B")
/ / create a new employee information header node
Head = new_node (head)
While (1)
{
/ / display menu,
Welcome ()
/ / receive user commands,
Scanf ("d", & orz)
/ / call the system function to clear the screen
System ("cls")
Switch (orz)
{
/ / enter the corresponding menu options according to the instructions
Case 1:Open (); break
Case 2:Save (); break
Case 3:Add (); break
Case 4:Mod (); break
Case 5:Del (); break
Case 6:Que_One (); break
Case 7:Que_Cla (); break
Case 8:Que_All (); break
Case 9:Exi (); break
Default: printf ("\ nMutual-> invalid instruction!\ n")
}
Printf ("\ n")
/ / execute system functions
System ("pause")
System ("cls")
}
Return 0
}
In this way, the program is complete. In this program design, we should be careful not to forget to point the pointer to the next node, and pay attention. Whether the pointer points in the same direction as you set. Be careful not to make mistakes, or it will be troublesome to change. With the end of the C language programming course, my understanding of the C language has become more in-depth, and also have a strong interest in him. At the end, attach the complete program code done this time:
# include
# include
# include
# include
Typedef struct Node Node
/ / define salary information node
/ / basic salary, task salary, expenditure and actual salary respectively
Struct Score
{
Int ji,ren,zhi,sum
}
/ / define employee information node
/ / name, job number, age, salary and pointer to the next node, respectively
/ / four global variables, header node, and temporary node variables are defined.
Struct Node
{
Char name [20], num [20], age [20]
Struct Score score
Struct Node* next
} * head,*u,*p,*q
/ / define the number of employees and the high and average salary levels of multiple employees
Int n,C,M,E,Cj,Cy,Mj,My,Ej,Ey
Char num [20]
/ / enter the menu function
Void Welcome ()
{
Printf ("\ t\ t #\ n")
Printf ("\ t\ t # Welcome to use the employee payroll management system #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 1. Read file #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 2. Save the file #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 3. Add employee salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 4. Modify employee salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 5. Delete employee salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 6. Query personal salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 7. Query undergraduate salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 8. Query company salary #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t # 9. Exit the management system #\ n")
Printf ("\ t\ t # #\ n")
Printf ("\ t\ t #\ n\ n")
Printf ("\ t\ t Please enter instruction: (1-9)")
}
/ / construct node function
Node* new_node (Node* uu)
{
Uu = (Node*) malloc (sizeof (Node))
Uu- > next = NULL
Return uu
}
/ / add employee information
Void Add ()
{
/ / create a new node
U = new_node (u)
Printf ("\ nPlease enter the information of the employee you want to join:\ n")
Printf ("\ nname:")
Scanf ("% s", u-> name)
Printf ("\ nJob number:")
Scanf ("% s", u-> num)
Printf ("\ nAge:")
Scanf ("% s", u-> age)
Printf ("\ nBase salary, task salary, expenses:")
Scanf ("% d%d%d", & u-> score.ji,&u- > score.ren,&u- > score.zhi)
/ / calculate the actual wage
U-> score.sum = u-> score.ji + u-> score.ren-u-> score.zhi
/ / insert the tail pointer of the new node to the second node (break)
U-> next = head- > next
/ / put the new node behind the head node
Head- > next = u
Printf ("\ nMusi-> added successfully!\ n")
}
/ / modify the information according to the work number
/ / like the lookup function, traverse from the second node in turn, if the update is found
Void Mod ()
{
N = 0
Printf ("\ nPlease enter the work number you want to modify:")
Scanf ("% s", num)
For (u = head; u! = NULL;u = u-> next)
{
If (strcmp (u-> num,num) = = 0)
{
N = 1
Printf ("\ nPlease enter new base salary, task salary, expense:")
Scanf ("% d%d%d", & u-> score.ji,&u- > score.ren,&u- > score.zhi)
U-> score.sum = u-> score.ji + u-> score.ren-u-> score.zhi
Printf ("\ nMusi-> modified successfully!\ n")
Break
}
}
If (! n)
Printf ("\ nMurray-> has no information about this employee!\ n")
}
/ / Delete employee information according to work number
/ / start traversing from the beginning node, and delete this node if you find it
Void Del ()
{
N = 0
Printf ("\ nPlease enter the student number of the employee you want to delete:")
Scanf ("% s", num)
For (u = head; u! = NULL;u = u-> next)
{
If (strcmp (u-> num,num) = = 0)
{
N = 1
P-> next = u-> next
Free (u)
Printf ("\ nMusi-> deleted successfully!\ n")
Break
}
P = u
}
If (! n)
Printf ("\ nMurray-> has no information about this employee!\ n")
}
Void Sort ()
{
Int i,j
/ / record the total number of employees
N = 0
For (u = head- > next; u! = NULL;u = u-> next)
Nasty +
/ / the bubbling method is used to arrange each node according to the ascending order of the work number and the descending order of the actual wage.
For (iTun1)
If (strcmp (p-> num,q- > num) > 0 | | strcmp (p-> num,q- > num) = = 0 & & p-> score.sum
< q->Score.sum)
{
U-> next = Q
P-> next = Q-> next
Q-> next = p
}
U = u-> next
}
}
}
/ / find a certain employee's score by work number
Void Que_One ()
{
/ / Mark variable to record whether the search is successful
N = 0
Printf ("\ nPlease enter the work number of the employee you want to query:")
Scanf ("% s", num)
/ / traverse from the second node to the last node
For (u = head- > next; u! = NULL;u = u-> next)
{
/ / if the work number of the current node is the same as the work number you are looking for, this employee information is output.
If (strcmp (u-> num,num) = = 0)
{
N = 1
Printf ("\ n")
Puts ("Age, name, basic salary, Task wage, payroll, actual wage")
Printf ("%-11s%-15s", u-> age,u- > name)
Printf ("%-6d%-6d%-6d%-6d\ n", u-> score.ji,u- > score.ren,u- > score.zhi,u- > score.sum)
Break
}
}
If (! n)
Printf ("\ nMurray-> has no information about this employee!\ n")
}
Void Analyze_Sco (Node * uu)
{
/ / A pair of nodes found to calculate the average wages
/ / ask for high wage rate and lower wage rate
C + = uu- > score.ji
M + = uu- > score.ren
E + = uu- > score.zhi
If (uu- > score.ji > = 1000)
Cj++
If (uu- > score.ji > = 5000)
Cy++
If (uu- > score.ren > = 500)
Mj++
If (uu- > score.ren > = 1000)
My++
}
/ / print the average wage, high wage rate and low wage rate
Void Print_Sco ()
{
Printf ("basic average wage:%-6.2f, lower wage rate:%-6.2f, high wage rate:%-6.2f.\ n\ n", (float) 100*Cj/n, (float) 100*Cy/n)
Printf ("average wage for tasks:%-6.2f, lower wage rate:%-6.2f, high wage rate:%-6.2f.\ n\ n", (float) 100*Mj/n, (float) 100*My/n)
}
/ / find information about all employees of a certain age
Void Que_Cla ()
{
/ / sort a pair of linked list nodes
Sort ()
N = C = M = E = Cj = Cy = Mj = My = 0
Printf ("\ nPlease enter the age you want to query:")
Scanf ("% s", num)
Printf ("\ n")
For (u = head- > next; u! = NULL;u = u-> next)
{
/ / employees who are not of that age will skip
If (strcmp (u-> age,num))
Continue
/ / print head information if it is the first employee
If (! n)
Puts ("Age, name, basic salary, Task wage, payroll, actual wage")
Nasty +
Printf ("%-11s%-15s", u-> age,u- > name)
Printf ("%-6d%-6d%-6d%-d\ n", u-> score.ji,u- > score.ren,u- > score.zhi,u- > score.sum)
Analyze_Sco (u)
}
If (! n)
{
Printf ("No employee information of this age!\ n")
Return
}
/ / print the characteristic values of each salary of employees of this age.
Printf ("\ nThere are% d employees in this age group.\ n\ n", n)
Print_Sco ()
}
/ / print the information of all employees of the company
/ / the details are the same as printing age employee information.
Void Que_All ()
{
Sort ()
N = C = M = E = Cj = Cy = Mj = My = Ej = Ey = 0
Printf ("\ n")
If (head- > next = = NULL)
{
Printf ("--> No employee information!\ n")
Return
}
Puts ("Age, work No., name, basic salary, Task salary, payroll, actual wage")
For (u = head- > next; u! = NULL;u = u-> next)
{
Nasty +
Printf ("%-12s%-12s%-15s", u-> age,u- > num,u- > name)
Printf ("%-6d%-6d%-6d%-d\ n", u-> score.ji,u- > score.ren,u- > score.zhi,u- > score.sum)
Analyze_Sco (u)
}
Printf ("\ nThe company has% d employees.\ n\ n", n)
Print_Sco ()
}
/ / Save the file
Void Save ()
{
Char c
Printf ("\ nconfirm save? (y _ N):")
Scanf ("% * c% c" & c)
If (c = ='N')
Return
FILE * fp
If ((fp=fopen ("C:\\ data.txt", "w")) = = NULL)
{
Printf ("\ nMurray-> cannot open the file\ n")
Return
}
/ / write data header information
Fputs ("Age, work number, name, basic salary, Task wage, payroll, actual wage", fp)
If (head- > next! = NULL)
Fputs ("\ n", fp)
/ / write files in turn from the beginning node
For (u = head- > next; u! = NULL;u = u-> next)
{
Fprintf (fp, "%-11s%-11s%-15s", u-> age,u- > num,u- > name)
Fprintf (fp, "%-6d%-6d%-6d%-d", u-> score.ji,u- > score.ren,u- > score.zhi,u- > score.sum)
If (u-> next! = NULL)
Fprintf (fp, "\ n")
}
Fclose (fp)
Printf ("\ nMurray-> score was successfully deposited in C:\ data.txt\ n")
}
/ / read the file
Void Open ()
{
Printf ("\ nPlease put the data in the directory C:\ data.txt and press any key to confirm.\ n")
Getch ()
FILE * fp
/ / read files from the root directory of disk c
If ((fp=fopen ("C:\\ data.txt", "r")) = = NULL)
{
Printf ("\ nMutual-> file not found!\ n")
Return
}
Char tmp [100]
/ / read 65 menu header characters and store them in the tem character array
Fgets (tmp,66,fp)
/ / read to jump out of the loop at the end of the file
While (! feof (fp))
{
U = new_node (u)
Fscanf (fp, "% s%s%s", u-> age,u- > num,u- > name)
Fscanf (fp, "% d%d%d%d", & u-> score.ji,&u- > score.ren,&u- > score.zhi,&u- > score.sum)
/ / create a linked list by plug-in
U-> next = head- > next
Head- > next = u
}
Printf ("\ nMutual-> score read successfully!\ n")
Fclose (fp)
}
/ / exit the program
Void Exi ()
{
Char c
Printf ("\ nconfirm exit? (y _ N):")
Scanf ("% * c% c" & c)
If (c = ='N')
Return
/ / print the concluding remarks
System ("cls")
Printf ("\ n\ n")
Printf ("\ t\ t\ t% c% c\ n")
Printf ("\ t\ t\ t% c Thank you for using% c\ n", 4jin4)
Printf ("\ t\ t\ t% c% c\ n")
Printf ("\ t\ t\ t Thank you!\ n\ n\ n")
Exit (0)
}
Int main ()
{
/ / variables that store instructions
Int orz
/ / set the system text color
System ("color 0B")
/ / create a new employee information header node
Head = new_node (head)
While (1)
{
/ / display menu,
Welcome ()
/ / receive user commands,
Scanf ("d", & orz)
/ / call the system function to clear the screen
System ("cls")
Switch (orz)
{
/ / enter the corresponding menu options according to the instructions
Case 1:Open (); break
Case 2:Save (); break
Case 3:Add (); break
Case 4:Mod (); break
Case 5:Del (); break
Case 6:Que_One (); break
Case 7:Que_Cla (); break
Case 8:Que_All (); break
Case 9:Exi (); break
Default: printf ("\ nMutual-> invalid instruction!\ n")
}
Printf ("\ n")
/ / execute system functions
System ("pause")
System ("cls")
}
Return 0
}
At this point, I believe that everyone on the "C language pointer and linked list example analysis" have a deeper understanding, might as well to the actual operation of it! Here is the website, more related content can enter the relevant channels to inquire, follow us, continue to learn!
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 290
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.