供参考:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(struct String)
struct String
{
char s[32];
struct String* next;
};
int n; //单词数
struct String* creat_list(void)
{
struct String* head, * p1, * p2;
p1 = p2 = (struct String*)malloc(LEN);
head = NULL;
for (n = 0; n <= 9;)
{
n = n + 1;
scanf("%s", p1->s);
if (n == 1) head = p1;
else p2->next = p1;
p2 = p1;
p1 = (struct String*)malloc(LEN);
}
p2->next = NULL;
return(head);
}
struct String* insert_list(struct String* head, char* s, int x)
{
int m = 0;
struct String* p1, * p2, * p;
p1 = p2 = head;
while (m != x && p1 != NULL)
{
p2 = p1;
p1 = p1->next;
m = m + 1;
}
if (m == x)
{
p = (struct String*)malloc(LEN);
p2->next = p;
strcpy(p->s, s);
p->next = p1;
n = n + 1;
}
else printf("Wrong destination!\n");
return(head);
}
void search_list(struct String* head, char* s)
{
int m = 1;
int x = 0;
struct String* p;
p = head;
while (p != NULL)
{
while (strcmp(p->s, s) != 0 && p->next != NULL)
{
p = p->next;
m = m + 1;
}
if (strcmp(p->s, s) == 0)
{
x = x + 1;
printf("No.%d is %s!\n", m, s);
}
else if (x == 0) printf("%s not found!\n", s);
p = p->next;
m = m + 1;
}
}
struct String* delete_list(struct String* head, char* s)
{
int m = 0;
struct String* p1, * p2 = NULL, * q = NULL;
p1 = head;
if (head == NULL)
{
printf("\nlist null!\n");
return(head);
}
while (p1 != NULL)
{
if (strcmp(p1->s, s) == 0)
{
m = m + 1;
q = p1;
if (p1 == head)
{
if (head->next != NULL)
{
head = p1->next;
p1 = head;
}
else {
head = NULL;
p1 = NULL;
}
}
else {
p2->next = p1->next;
p1 = p2;
}
free(q); q = NULL;
printf("delete char %s %dst!\n", s, m);
n = n - 1;
}
else
{
p2 = p1;
p1 = p1->next;
}
}
if (m == 0) printf("%s not found!\n", s);
return(head);
}
void print(struct String* head)
{
struct String* p;
if (head == NULL) return;
p = head;
printf("\nNow the %d characters are:\n", n);
do
{
printf("%s ", p->s);
p = p->next;
} while (p != NULL);
}
int main()
{
char ins_char[32], search_char[32], del_char[32];
int x;
struct String* head, * p1 = nullptr, * p2 = nullptr;
printf("Input 10 string:\n");
head = creat_list();
print(head);
printf("\nInput the inserted char:");
scanf("\n");
scanf("%s", ins_char);
printf("Input the destination:");
scanf("%d", &x);
while (strcmp(ins_char, "0") != 0)//字符串 “0”结束插入
{
head = insert_list(head, ins_char, x);
print(head);
printf("\nInput the inserted char:");
scanf("\n");
scanf("%s", ins_char);
printf("\nInput the destination:");
scanf("%d", &x);
}
printf("\nInput the searched char:");
scanf("\n");
scanf("%s", search_char);
while (strcmp(search_char, "0") != 0)//字符串 “0”结束查询
{
search_list(head, search_char);
printf("\nInput the searched char:");
scanf("\n");
scanf("%s", search_char);
}
printf("\nInput the deleted char:");
scanf("\n");
scanf("%s", del_char);
while (strcmp(del_char, "0") != 0)//字符串 “0”结束删除
{
head = delete_list(head, del_char);
print(head);
printf("\nInput the deleted char:");
scanf("\n");
scanf("%s", del_char);
}
return 0;
}