C language has a head loop single linked list

Source: Internet
Author: User
Tags strcmp

/************************************************************************* > File name:singlelinetable.c > Au thor:zshh0604 > Mail: [email protected] > Created time:2014 October 15 Wednesday 11:34 08 Sec. ********************* /#include <stdio.h> #include <stdlib.h> #include  <string.h>/*** * Circular single linked list. * Student Structure: *id: Student number *name: Student name *math: Score *next: Point to next student struct */typedef struct student {int id; char name[20];int math;s Truct student * NEXT;} stu;typedef int Cmp_stu (const void *, const void *);/**** * Function Function: * Create a head node. * Function parameter: *void. * Return value of function: * Returns the head node pointer. */stu * Create (void) {stu *head = null;stu *p = Null;stu *new = null;int tmpid = 0; char tmpname[20];int tmpmath;head = (stu *) malloc (sizeof (STU)), if (head = = NULL) {printf ("Failed to allocate STU address space!!! \ n "); return NULL;}   Head->id = 0;strncpy (Head->name, "n"); Head->math = 0;//head->next = NULL;   Single-linked list head->next = head;             A single linked list with head loops P = head; When the head is created, it shouldPoint the pointer to the head. while (1) {new = (stu*) malloc (sizeof (STU)), if (new==null) {printf ("malloc new error\n"); return NULL;} Tmpid++;if (Tmpid = = 3) {break;} New->id = tmpid;printf ("\nname="), scanf ("%s", Tmpname), strncpy (new->name,tmpname,20);p rintf ("math="); scanf ( "%d", &tmpmath); new->math = Tmpmath;p->next = new;  p = new;//new->next = NULL;  Single-linked list new->next = head; A single-linked list with head loops}return head;} /*** * Function: * Print out the data in a single linked list. * Function Parameter: *head is the head of the linked list. * Return Value: * No return value */void printf_list (Stu *head) {stu *tmp = Null;int i = 0;if (head== NULL) {return;} TMP = head->next; #if1//With Head loop single-linked list while (Tmp!=head) {i++;p rintf ("name =%s\n", tmp->name);p rintf ("math =%d\n", tmp- >math); tmp = Tmp->next;} #elsewhile (Tmp!=null)//single-linked list {i++;p rintf ("name =%s\n", tmp->name);p rintf ("math =%d\n", tmp->math); tmp = tmp-> Next; #endifprintf ("Len =%d\n", i);} /***** * Function Function: * comparison function. * Function Parameter: * * function return value: * Returns 0 indicates success.  * Return 1 indicates failure? * */int CMP (const void * data, const void * key) {Stu * head = null;int * Tmpkey =null;head = (stu*) data;tmpkey= (int*) key;//printf ("Head->id =%d, Tmpkey =%d", ((stu*) data)->id, *tmpkey); if (Head->id = = *tmpkey ) {return 0;} return 1;} /**** * Function Function: * Find data in one node. * Function Parameter: * * function return value: * Return 0 Lookup succeeded, return 1 lookup failed. */void * FIND_STU (stu* head,cmp_stu* cmps, const void *key) {stu * tmp = NULL;TMP = head->next;if (key = = NULL) {return NU LL;} #if 1//Circular single-linked list if (CMPS (const void *) head, (const void *) key) = = 0) {printf ("name =%s\n", tmp->name);p rintf ("math =%d\n" , Tmp->math); return tmp;} while (tmp! = head) {if (CMPS (const void *) TMP, (const void *) key) (==0) {printf ("name =%s\n", tmp->name);p rintf ("math =% D\n ", Tmp->math); return tmp;} TMP = Tmp->next;} #else//single-linked list while (tmp! = NULL) {if (CMPS (const void *) TMP, (const void *) key) ==0) {printf ("name =%s\n", tmp->name);p RI NTF ("math =%d\n", tmp->math); return tmp;} TMP = tmp->next; #endifreturn NULL;} /*** * Function Function: * Insert node. * Function Parameter: * Head: The node in the linked list. * NEW: The node that needs to be inserted. * Return value of function: * Returns 0 indicates successful insertion. * Return 1 indicates an insert failure. */int Insert_tool (stu* Head, stu* new) {if (head==null| | New = NULL) {return 1;} #if 1//Cycle single-link list if (Head->next = = head) {head->next = New;new->next = head;} #else//single-linked list if (Head->next = = null) {Head->next = New;new->next = null;} #endifnew->next = Head->next;head->next = New;return 0;} /*** * Function Function: * Compare by name.  * Function Parameter: * Data, key is the value to look up in the data. * Return value of function: * Returns 0 success. 1 failed to return. */int cmp_name (const void *data, const void *key) {stu *tmp = Null;char *tmpname = null;if (data== NULL | | key = NULL) {Retu RN 1;} TMP = (stu *) Data;tmpname = (char *) key;if (strncmp (tmp->name,tmpname) ==0) {return 0;} return 1;} /*** * * Function function: * Insert a node into the linked list. * Function parameter: *head: The head node of the linked list. *name: The name of the node to view. * Function return Value: * Returns 0 insert succeeded. * Return 1 Insert failed. */int Insert_stu (stu* Head,char *name) {stu * tmp = null;stu * new = Null;char Tmpname[20];int tmpmath;tmp = (stu *) Find_st U (head,cmp_name,name), if (tmp = = NULL) {printf ("The classmate was not found \"); return 1;} New = (stu*) malloc (sizeof (STU));p rintf ("Name="), scanf ("%s", Tmpname), strncpy (new->name,tmpname,20);p rintf (" Math= "); scanf ("%d ", &tmpmath); NEW-&GT;math = Tmpmath;new->id = 10;insert_tool (tmp,new); return 0;} /** * Function Function: * Delete the established node. * Parameters: * Head: List header * Name: To delete the student's name. * return value. * 0 returns success. 1 failed to return. */int Delete_stu (stu * Head,char *name) {stu * back = Null;stu * p = null;p = head->next; #if 1//Circular single-link list if (strcmp (p-&gt ; name,name) ==0) {Head->next = P->next;p->next = Null;free (p); return 0;} while (P! = head) {back = P; p = p->next; if (strcmp (p->name,name) = = 0) {Back->next = P->next;p->next = Null;f REE (p); return 0;}} #else//single-linked list while (p!=null) {back = P; p = p->next; if (strcmp (p->name,name) = = 0) {Back->next = P->next;p->nex t = Null;free (p); return 0;} #endifreturn 1;} /*** * Function function: * Destroy linked list. * Parameters of the function: * The head of the linked list. * The return value of the function *0 indicates a successful return. 1 indicates a failure to return. */int destory_list (stu* head) {stu *tmp;stu *p;p = Head->next;while (p!=head) {tmp = P; p = P->next;tmp->next = null;printf ("name =%s", tmp->name); free (TMP);}} int main (void) {int i = 2;stu * head = Null;head = Create ();p rintf_list (head); Find_stu (head,cmp,&i); Insert_stU (head, "BB");p rintf_list (head);p rintf ("----------------------\ n");d Estory_list (head), head = Null;printf_list ( Head);p rintf ("---------------------\ n");}

C language has a head loop single linked list

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.