说明
改代码实现了链表的可选择初始化,链表结点的插入和删除,对于无效删除做出了处理。
代码片段
#include
#include
typedef struct list
{
int x;
struct list *next;
} T;
T *head = NULL;
T *pre = NULL;
T *cur = NULL;
void bianlilist(void);
void deletelist(void);
void addlist(void);
int freal(void);
int main()
{
puts("Please enter a number, i will build a list from 0 to the number, if you don't need, you can enter the number 0.");
int n;
scanf("%d", &n);
getchar();
for (int i = 0; i < n; i++)
{
cur = (T *)malloc(sizeof(T));
cur->next = NULL;
if (head == NULL)
head = cur;
else
pre->next = cur;
cur->x = i;
pre = cur;
}
while (1)
{
int c = freal();
if (c)
break;
}
while (getchar() != 'n')
;
return 0;
}
void bianlilist(void)
{
T *ps = head;
int flag = 0;
while (ps != NULL)
{
if (flag == 0)
{
printf("%d", ps->x);
flag++;
}
else
printf(" - %d", ps->x);
ps = ps->next;
}
putchar('n');
}
void deletelist(void)
{
printf("nPlease enter the number which you want to delete: ");
int y;
scanf("%d", &y);
getchar();
T *ps = head;
T *temp;
if (head->x == y)
{
temp = head;
head = head->next;
free(temp);
return;
}
int flag=0;
while (1)
{
if(ps->next==NULL)
{
puts("Invalid input! Please enter again!");
return;
}
if(ps->next->x != y)
ps = ps->next;
else
break;
}
temp = ps->next;
ps->next = temp->next;
free(temp);
}
void addlist(void)
{
int y;
printf("nPlease enter the number which you want to add: ");
scanf("%d", &y);
getchar();
T *ps = head;
T *temp = (T *)malloc(sizeof(T));
temp->x = y;
temp->next=NULL;
if (head == NULL)
{
head = temp;
return;
}
if (y < head->x)
{
temp->next = head;
head = temp;
return;
}
while (1)
{
if (ps->next == NULL)
{
ps->next = temp;
return;
}
if (ps->next->x >= y)
break;
else
ps = ps->next;
}
temp->next = ps->next;
ps->next = temp;
}
int freal(void)
{
printf("What function do you want to realize?n");
puts("a.Add a element. b.Delete a element");
puts("c.Output the list. d.Quit program.");
char ch = getchar();
getchar();
switch (ch)
{
case 'a':
addlist();
break;
case 'b':
deletelist();
break;
case 'c':
bianlilist();
break;
case 'd':
return 1;
default:
puts("Invalid input! Please enter again!");
}
return 0;
}
改代码实现了链表的可选择初始化,链表结点的插入和删除,对于无效删除做出了处理。
#include#include typedef struct list { int x; struct list *next; } T; T *head = NULL; T *pre = NULL; T *cur = NULL; void bianlilist(void); void deletelist(void); void addlist(void); int freal(void); int main() { puts("Please enter a number, i will build a list from 0 to the number, if you don't need, you can enter the number 0."); int n; scanf("%d", &n); getchar(); for (int i = 0; i < n; i++) { cur = (T *)malloc(sizeof(T)); cur->next = NULL; if (head == NULL) head = cur; else pre->next = cur; cur->x = i; pre = cur; } while (1) { int c = freal(); if (c) break; } while (getchar() != 'n') ; return 0; } void bianlilist(void) { T *ps = head; int flag = 0; while (ps != NULL) { if (flag == 0) { printf("%d", ps->x); flag++; } else printf(" - %d", ps->x); ps = ps->next; } putchar('n'); } void deletelist(void) { printf("nPlease enter the number which you want to delete: "); int y; scanf("%d", &y); getchar(); T *ps = head; T *temp; if (head->x == y) { temp = head; head = head->next; free(temp); return; } int flag=0; while (1) { if(ps->next==NULL) { puts("Invalid input! Please enter again!"); return; } if(ps->next->x != y) ps = ps->next; else break; } temp = ps->next; ps->next = temp->next; free(temp); } void addlist(void) { int y; printf("nPlease enter the number which you want to add: "); scanf("%d", &y); getchar(); T *ps = head; T *temp = (T *)malloc(sizeof(T)); temp->x = y; temp->next=NULL; if (head == NULL) { head = temp; return; } if (y < head->x) { temp->next = head; head = temp; return; } while (1) { if (ps->next == NULL) { ps->next = temp; return; } if (ps->next->x >= y) break; else ps = ps->next; } temp->next = ps->next; ps->next = temp; } int freal(void) { printf("What function do you want to realize?n"); puts("a.Add a element. b.Delete a element"); puts("c.Output the list. d.Quit program."); char ch = getchar(); getchar(); switch (ch) { case 'a': addlist(); break; case 'b': deletelist(); break; case 'c': bianlilist(); break; case 'd': return 1; default: puts("Invalid input! Please enter again!"); } return 0; }



