C語言鏈表小例子備份

#include
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 80




typedef struct Link
{
char data[BUFFER_SIZE];
struct Link *next;
};


struct Link Link;


/*----------------------------init_link---------------------------
------------------------------------------------------------------
-----------------------------------------------------------------*/
Link  *init_link()
{
Link *head;
head = (struct Link *)malloc(sizeof(struct Link));
if(NULL == head)
{
printf("head malloc ERROR!\n");
exit(-1);
}
return head;
}


/*----------------------------create_link-------------------------
------------------------------------------------------------------
-----------------------------------------------------------------*/
void create_link(Link *head)
{
Link *p;
Link *q;
char data[20];
int count = 1;
printf("Please input the No.%d data :\n", count);
scanf("%s", &data);
while(strncmp(data, "exit", 4) != 0)
{
p = (struct Link *)malloc(sizeof(struct Link));
if(NULL == p)
{
printf("p malloc ERROR!\n");
}
strcpy(p->data, data);
if(NULL == p)
{
printf("p strcpy ERROR!\n");
exit(-1);
}
count++;
q->next = p;
q = p;
printf("Please input the No.%d data :\n",count);
scanf("%s", &data);
}
p->next = NULL;


}


/*----------------------------display_link------------------------
------------------------------------------------------------------
-----------------------------------------------------------------*/
void display_link(Link *head)
{
Link *p;
p = head -> next;
while(p != NULL)
{
printf("%s", p -> data);
p = p -> next;
}
}


/*----------------------------free_link---------------------------
------------------------------------------------------------------
-----------------------------------------------------------------*/
void free_link(Link *head)
{
Link *p = head;
Link *q;
while(p != NULL)
{
q = p->next;
free(p);
p = q;
}
}


/*----------------------------delete_link-------------------------
------------------------------------------------------------------
-----------------------------------------------------------------*/
void delete_link(Link *head, char *data)
{
Link *p = head->next;
Link *q = head;
int flag = 0;
while(p != NULL)
{  
if(strcmp(p->data, data) == 0)
{
q->next = p->next;
free(p);
flag = 1;
break;
}
q = p;
p = p->next;
}
if(1 == flag)
{
printf("Success Deleting!\n");
}
else
{
printf("Failed Deleting!\n");
}




}


/*----------------------------add_link_at the end of the link structure------------------------
------------------------------------------------------------------
-----------------------------------------------------------------*/
void add_link_end(Link *head, char *data)
{
Link *p = head;
while(p->next != NULL)
{
p = p->next;
}
struct Link *q = (struct Link *)malloc(sizeof(struct Link));
if(q == NULL)
{
printf("\n");
}
strcpy(q -> data, data);
p -> next = q;
q -> next = NULL;
}


/*----------------------------add_link_before---------------------
------------------------------------------------------------------
-----------------------------------------------------------------*/


void add_link_before(Link *head, char *place, char *data)
{
int flag = 0;
Link *p = head -> next;
Link *q = head;
while(p != NULL)
{
if(strcmp(p -> data, place) == 0)
{
flag = 1;
Link *insert_node = (struct Link *)malloc(sizeof(struct Link));
strcpy(insert_node -> data, data);
q -> next = insert_node;
insert_node -> next = p;
}
q = p;
p = p -> next;
}
if(flag == 1)
{
printf("Success Inserting !\n");
}
else
{
puts("Failed Inserting !\n");
}


}


/*----------------------------alter_link--------------------------
------------------------------------------------------------------
-----------------------------------------------------------------*/


void alter_link(Link *head,char *old_data,char *new_data)
{
Link *p = head->next;
int flag = 0;
while(p != NULL)
{
if(strcmp(p -> data, old_data) == 0)
{
flag = 1;
printf("Infomation Founded!\n");
strcpy(p -> data, new_data);
break;
}
p = p->next;
}
if(flag == 0)
{
printf("Infomation Not Founded!\nPlease make sure the infomation you wanna replace is in the Link! \n");
exit(-1);
}


}


/*----------------------------find_link-------------------------
------------------------------------------------------------------
-----------------------------------------------------------------*/


void find_link(Link *head,char *data)
{
Link *p = head->next;
int flag = 0;
while(p != NULL)
{
if(strcmp(p -> data, data) == 0)
{
flag = 1;
break;
}
p = p->next;
}
if(flag == 1)
{
printf("Infomation Founded!\n");
}
else
{
printf("Infomation Not Founded!\n");
}
}


void main()
{
Link *head;
head = init_link();
create_link(head);
display_link(head);
delete_link(head,"123");
    display_link(head);
find_link(head,"456");
display_link(head);
add_link_end(head,"efg");
display_link(head);
add_link_before(head,"efg","abc");
display_link(head);
free_link(head);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章