#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
char id[20];
char name[20];
int age;
struct node *next;
} NODE, *LINK;
LINK head = NULL;
LINK n = NULL;
int AddNode(LINK);
void ShowNode(void);
int DeleteNode(LINK);
int PrintLine(int);
int AddLine(LINK,int);
int DeleteLine(int);
void Free(void);
int AddNode(LINK add)
{
LINK pre;
LINK cur;
pre = head;
cur = head->next;
if (head->next == NULL)
{
head->next = add;
return(0);
}
else
{
while (cur != NULL)
{
if (strcmp(add->id, cur->id) <= 0)
break;
else {
pre = cur;
cur = cur->next;
}
}
pre->next = add;
add->next = cur;
return(0);
}
}
int AddLine(LINK add, int index)
{
LINK pre;
LINK cur;
pre = head;
cur = head->next;
while(index!=1 && cur!=NULL)
{
pre = cur;
cur = cur->next;
index-=1;
}
if (cur==NULL,index!=1)
{
printf("Did not find the correct intex to add\n");
return(1);
}
else{
pre->next = add;
add->next = cur;
return(0);
}
}
int DeleteNode(LINK delete)
{
LINK pre;
LINK cur;
pre = head;
cur =head->next;
if (head->next == NULL)
{
printf("Did not find to delete\n");
return(1);
}
else
{
while(cur!=NULL)
{
if (strcmp(delete->id, cur->id) == 0)
break;
else {
pre = cur;
cur = cur->next;
}
}
if (cur==NULL)
{
printf("Did not find to delete\n");
return(1);
}
else{
pre->next = cur->next;
free(cur);
cur = NULL;
free(delete);
delete = NULL;
return(0);
}
}
}
int DeleteLine(int index)
{
LINK pre;
LINK cur;
pre = head;
cur = head->next;
while(index!=1 && cur!=NULL)
{
pre= cur;
cur = cur->next;
index-=1;
}
if (index!=1 && cur==NULL)
{
printf("Did not find correct index to delete\n");
return(1);
}
else
{
pre->next = cur->next;
free(cur);
cur = NULL;
return(0);
}
}
int PrintLine(int index)
{
LINK cur;
cur = head->next;
while(index!=1 && cur!= NULL)
{
cur = cur->next;
index -=1;
}
if (cur==NULL)
{
printf("Did not find to print\n");
return(1);
}
else
{
printf("%-10s: %-10s: %3d\n", cur->id, cur->name, cur->age);
return(0);
}
}
void ShowNode(void)
{
LINK p;
if (head != NULL) {
p = head->next;
while (p)
{
printf("%-10s: %-10s: %3d\n", p->id, p->name, p->age);
p = p->next;
}
}
else
printf("Empty!");
}
void Free(void)
{
LINK cur;
cur = head->next;
while(cur!=NULL){
head = cur->next;
free(cur);
cur=head;
}
free(cur);
cur=NULL;
free(head);
head=NULL;
}
int main(int argc, char const *argv[])
{
FILE *file;
char buffer[128];
char *temp;
char op;
int index;
head = (LINK)malloc(sizeof(NODE));
head->next = NULL;
if (argc != 2)
{
fprintf(stderr, "error\n");
exit(EXIT_FAILURE);
}
file = fopen(argv[1], "rt");
// file = fopen("Lab1test.DAT", "rt");
if (file == NULL)
{
fprintf(stderr, "Cannot open/find %s\n", "Lab1test.DAT");
getchar();
exit(EXIT_FAILURE);
}
while (!feof(file))
{
if (fgets(buffer, 127, file) == NULL)
break;
buffer[strlen(buffer) - 1] = '\0';
n = (LINK)malloc(sizeof(NODE));
temp = strtok(buffer, ",");
strcpy(n->id, temp);
temp = strtok(NULL, ",");
strcpy(n->name, temp);
temp = strtok(NULL, ",");
n->age = atoi(temp);
n->next = NULL;
if (AddNode(n) != 0)
{
fprintf(stderr, "Error adding node. Aborting\n");
getchar();
exit(EXIT_FAILURE);
}
}
ShowNode();
while(1)
{
printf("you can input: P D I S or Q \n");
scanf("%s",&buffer);
/**/
buffer[strlen(buffer)] = '\0';
op = buffer[0];
if (op == 'P')
{
index =atoi( &buffer[1]);
if(PrintLine(index)!=0)
printf("please input again...\n");
}
else if (op== 'D')
{
index = atoi(&buffer[1]);
if (DeleteLine(index)!=0)
printf("please input again...\n");
}
else if (op == 'I')
{
n = (LINK)malloc(sizeof(NODE));
strtok(buffer, ",");
index = atoi(&buffer[1]);
temp = strtok(NULL,",");
strcpy(n->id, temp);
temp = strtok(NULL, ",");
strcpy(n->name, temp);
temp = strtok(NULL, ",");
n->age = atoi(temp);
n->next = NULL;
if(AddLine(n,index)!=0)
printf("please input again...\n");
}
else if (op=='Q')
break;
else if (op=='S')
ShowNode();
else
printf("please input the correct operation\n");
}
ShowNode();
getchar();
printf("starting to free NODE... \n");
Free();
printf("show the LINK: ");
ShowNode();
getchar();
return 0;
}
链表 实例代码
最新推荐文章于 2022-09-09 18:45:42 发布