#include<stdio.h>#include<stdlib.h>typedefstruct SingleLinkTable
{int elem;struct SingleLinkTable *next;} SingleLinkTable;/**
* @brief
* create single link table
* @return SingleLinkTable*
*/
SingleLinkTable *initSingleLink(){// create a head node
SingleLinkTable * p =(SingleLinkTable*)malloc(sizeof(SingleLinkTable));// declare a pointer to the head node for traversing the linked list
SingleLinkTable * temp = p;// create link tablefor(int i =1;i <5; i ++){
SingleLinkTable *a =(SingleLinkTable*)malloc(sizeof(SingleLinkTable));
a->elem = i;
a->next =NULL;
temp->next = a;
temp = temp->next;}return p;}/**
* @brief
* insert element
* @param p source link table
* @param elem insert data
* @param add insert site
* @return SingleLinkTable*
*/
SingleLinkTable *insertElement(SingleLinkTable * p,int elem,int add){// create a temporary node
SingleLinkTable * temp = p;// the first, we need find the upper node for insert sitefor(int i =1;i < add; i ++){
temp = temp->next;if(temp ==NULL){printf("the insert site is not permit\n");return p;}}// create the insert node c
SingleLinkTable * c =(SingleLinkTable*)malloc(sizeof(SingleLinkTable));
c->elem = elem;// insert node to the link table
c->next = temp->next;
temp->next = c;return p;}/**
* @brief
* delet element
* @param p source link table
* @param add delete site
* @return SingleLinkTable*
*/
SingleLinkTable *delElement(SingleLinkTable * p,int add){
SingleLinkTable * temp = p;// traverse to the previous node of the deleted nodefor(int i =1; i < add; i ++){
temp = temp->next;if(temp->next ==NULL){printf("the node is not exist!\n");return p;}}printf("into the delete method:\n");// set a pointer to the deleted node separately to prevent loss
SingleLinkTable * del = temp->next;// the method to delete a node is to change te pointer field of the previous node
temp->next = temp->next->next;// releade the node manually to prevent memory leakagefree(del);return p;}/**
* @brief
* find element site in link table
* @param p
* @param element
* @return int
*/intselectElement(SingleLinkTable * p,int element){
SingleLinkTable * t = p;int i =1;while(t->next){
t = t->next;if(t->elem == element){return i;}
i ++;}return-1;}/**
* @brief
* update element
* @param p source table
* @param add update site
* @param element new element
* @return SingleLinkTable*
*/
SingleLinkTable *amendElement(SingleLinkTable * p,int add,int element){
SingleLinkTable * temp = p;// before traverse, temp printing to the primitive node
temp = temp->next;// traverse to the node to be updatedfor(int i =1; i < add;i ++){
temp = temp->next;}
temp->elem = element;return p;}/**
* @brief
* show link table
* @param p
*/voiddisplay(SingleLinkTable *p){// temp repointing to the head node
SingleLinkTable* temp = p;// if temp pointing to the next node which not NULL, execute output wordwhile(temp->next){
temp = temp->next;printf("%d ", temp->elem);}printf("\n");}intmain(){printf("init single link table:\n");
SingleLinkTable *p =initSingleLink();display(p);printf("insert element 5 at site 4:\n");
p =insertElement(p,5,4);display(p);printf("delete element 3: \n");
p =delElement(p,3);display(p);printf("find the site for element 2: \n");int address =selectElement(p,2);if(address ==-1){printf("not have the element;\n");}else{printf("the site is : %d\n", address);}printf("modify the element 7 for site 3:\n");
p =amendElement(p,3,7);display(p);return0;}