ds_orderedlist.cpp
#include<stdio.h>
#include<stdlib.h>
typedef struct Tordered_list_node ordered_list_node;
typedef struct Tordered_list_node {
int data;
ordered_list_node *next;
} ordered_list_node;
typedef struct {
int size;
ordered_list_node *top;
} ordered_list;
void insert(ordered_list *mlist, int data);
void remove(ordered_list *mlist, int target);
void traverse(ordered_list *mlist);
int main()
{
int data;
ordered_list *mlist = (ordered_list *)malloc(sizeof(ordered_list));
mlist->size = 0;
mlist->top = NULL;
printf("Insert number:");
while (1) {
scanf("%d", &data);
if (data == -1)
break;
else
insert(mlist, data);
}
printf("Ordered list:");
traverse(mlist);
while (1) {
printf("Enter number to remove:");
scanf("%d", &data);
if (data == -1)
break;
else
remove(mlist, data);
traverse(mlist);
}
return 0;
}
void insert(ordered_list *mlist, int data)
{
ordered_list_node *curnode, *newnode = (ordered_list_node *)malloc(sizeof(ordered_list_node));
newnode->data = data;
if (mlist->size == 0) {
newnode->next = NULL;
mlist->top = newnode;
} else if (data < mlist->top->data) {
newnode->next = mlist->top;
mlist->top = newnode;
} else {
curnode = mlist->top;
while (curnode->next != NULL && data >= curnode->next->data)
curnode = curnode->next;
newnode->next = curnode->next;
curnode->next = newnode;
}
mlist->size++;
}
void remove(ordered_list *mlist, int target)
{
ordered_list_node *curnode, *rmvnode;
if (mlist->size == 0) {
printf("Ordered list empty...\n");
} else if (mlist->top->data == target) {
rmvnode = mlist->top;
mlist->top = mlist->top->next;
free(rmvnode);
mlist->size--;
} else {
curnode = mlist->top;
while (curnode->next != NULL && curnode->next->data != target)
curnode = curnode->next;
rmvnode = curnode->next;
curnode->next = curnode->next->next;
free(rmvnode);
mlist->size--;
}
}
void traverse(ordered_list *mlist)
{
ordered_list_node *curnode = mlist->top;
while (curnode != NULL) {
printf(" %d", curnode->data);
curnode = curnode->next;
}
puts("");
}
--
全世界都知道我喜歡妳
唯一不知道ㄉ........
就是妳.......