-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlinked_list0b.c
More file actions
131 lines (115 loc) · 3.42 KB
/
linked_list0b.c
File metadata and controls
131 lines (115 loc) · 3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* File: linked_list0b.c
*
* Purpose: Implement an unsorted linked list with ops Insert (at head),
* Print. This version uses a pointer to a pointer to get the
* updated value of head_p back to main.
*
* Input: Single character lower case letters to indicate operators,
* followed by arguments needed by operators.
* Output: Results of operations.
*
* Compile: gcc -g -Wall -o linked_list0b linked_list0b.c
* Run: ./linked_list0b
*
* Notes:
* 1. Repeated values are allowed in the list
* 2. Program assumes an int will be entered when prompted
* for one.
*/
#include <stdio.h>
#include <stdlib.h>
struct list_node_s {
int data;
struct list_node_s* next_p;
};
void Insert(struct list_node_s** head_pp, int val);
void Print(struct list_node_s* head_p);
char Get_command(void);
int Get_value(void);
/*-----------------------------------------------------------------*/
int main(void) {
char command;
int value;
struct list_node_s* head_p = NULL;
/* start with empty list */
command = Get_command();
while (command != 'q' && command != 'Q') {
switch (command) {
case 'i':
case 'I':
value = Get_value();
Insert(&head_p, value);
break;
case 'p':
case 'P':
Print(head_p);
break;
case 'm':
case 'M':
value = Get_value();
printf("Member not implemented\n");
break;
case 'd':
case 'D':
value = Get_value();
printf("Delete not implemented\n");
break;
case 'f':
case 'F':
printf("Free list not implemented\n");
break;
default:
printf("There is no %c command\n", command);
printf("Please try again\n");
}
command = Get_command();
}
// Free_list
return 0;
} /* main */
/*-----------------------------------------------------------------*/
void Insert(struct list_node_s** head_pp, int val) {
struct list_node_s* temp_p;
temp_p = malloc(sizeof(struct list_node_s));
temp_p->data = val;
temp_p->next_p = *head_pp;
*head_pp = temp_p;
} /* Insert */
/*-----------------------------------------------------------------
* Function: Print
* Purpose: print list on a single line of stdout
* Input arg: head_p
*/
void Print(struct list_node_s* head_p) {
struct list_node_s* curr_p = head_p;
printf("list = ");
while (curr_p != NULL) {
printf("%d ", curr_p->data);
curr_p = curr_p->next_p;
}
printf("\n");
} /* Print */
/*-----------------------------------------------------------------
* Function: Get_command
* Purpose: Get a single character command from stdin
* Return value: The first non-whitespace character from stdin
*/
char Get_command(void) {
char c;
printf("Please enter a command (i, p, m, d, f, q): ");
/* Put the space before the %c so scanf will skip white space */
scanf(" %c", &c);
return c;
} /* Get_command */
/*-----------------------------------------------------------------
* Function: Get_value
* Purpose: Get an int from stdin
* Return val: The next int in stdin
* Note: Behavior unpredictable if an int isn't entered
*/
int Get_value(void) {
int val;
printf("Please enter a value: ");
scanf("%d", &val);
return val;
} /* Get_value */