#include<stdio.h>
#include<malloc.h>
struct LinkList {
int data;
int length;
struct LinkList* next;
};
struct LinkList* LL_Create() {
struct LinkList* L;
L = malloc(sizeof(struct LinkList));
L ->next= NULL;
L->length = 0;
}
struct LinkList* find(struct LinkList* L, int index) {
int cnt = 1;
struct LinkList* p;
p = L->next;
if (index<0 || index>L->length) {
printf("errow");
return 0;
}
if (index == 0)
return L;
else
{
while (p != NULL && cnt != index) {
p = p->next;
cnt++;
}
return p;
}
}
void LL_InsertAt(struct LinkList*L,int index,int e) {
struct LinkList* p, * q;
if (index<0 || index>L->length)
{
printf("errow");
return 0;
}
else{
L->length++;
p = find(L, index);
q = malloc(sizeof(struct LinkList*));
q->data = e;
q->next = p->next;
p->next = q;
}
}
void LL_DeleteAt(struct LinkList* L, int index)
{
struct LinkList* p, * q;
int cnt = 0;
if (index<0 || index>L->length) {
printf("errow\n");
return 0;
}
p = find(L, index);
if (p == NULL || p->next == NULL)
{
printf("illegal\n");
return 0;
}
q = p->next;
p->next = q->next;
free(q);
L->length--;
}
void LL_Output(struct LinkList*L) {
struct LinkList* p;
int cnt = 0;
p = L->next;
while (p != NULL&&cnt!=L->length-1) {
printf("%d->", p->data);
p = p->next;
cnt++;
}
printf("%d", p->data);
}
int main(int argc, char* argv[]) {
char ch;
int index, e;
struct LinkList* llist = LL_Create();
while (1) {
scanf_s("%c", &ch);
if (ch == 'I') {
scanf_s("%d %d\n", &index, &e);
LL_InsertAt(llist, index, e);
}
else if (ch == 'D') {
scanf_s("%d\n", &index);
LL_DeleteAt(llist, index);
}
else if (ch == 'P') {
LL_Output(llist);
}
else if (ch == 'L') {
printf("%d\n", llist->length);
}
else {
break;
}
fflush(stdin);
}
return 0;
}
test 1.2 单链表的基础功能
最新推荐文章于 2024-09-14 22:25:23 发布