#include <stdio.h>
#include <stdlib.h>
typedef struct node{
char data;
struct node *next;
}LINKLIST;
LINKLIST *INITLIST()
{
LINKLIST *head;
head = (LINKLIST*)malloc(sizeof(LINKLIST));
head->next = NULL;
return head;
}
LINKLIST *rCreate()
{
LINKLIST *head,*last,*p;
char ch;
head = (LINKLIST*)malloc(sizeof(LINKLIST));
head->next = NULL;
last = head;
printf("請輸入連結串列數值(尾插入法),@符號終止輸入:\n");
while((ch = getchar()) != '@')
{
p = (LINKLIST*)malloc(sizeof(LINKLIST));
p->data = ch;
last->next = p;
last = p;
p->next = NULL;
}
return head;
}
LINKLIST *hCreate()
{
LINKLIST *head,*p;
char ch;
head = (LINKLIST*)malloc(sizeof(LINKLIST));
head->next = NULL;
printf("請輸入連結串列數值(頭插入法),@符號終止輸入:\n");
while((ch = getchar()) != '@')
{
p = (LINKLIST*)malloc(sizeof(LINKLIST));
p->data = ch;
p->next = head->next;
head->next = p;
}
return head;
}
int LENGTH(LINKLIST *head)
{
int i = 0;
LINKLIST *p = head;
while(p = p->next)
i++;
return i;
}
LINKLIST *GET(LINKLIST *head,int n)
{
LINKLIST *p = head;
int i = 1;
while(i<=n&&p)
{
p = p->next;
i++;
}
return p;
}
LINKLIST *LOCATE(LINKLIST *head,char data)
{
LINKLIST *p = head->next;
while(p&&(p->data!=data))
p = p->next;
return p;
}
void INSERT(LINKLIST *head,int n,char data)
{
LINKLIST *inserted,*p;
inserted = (LINKLIST*)malloc(sizeof(LINKLIST));
inserted->next = NULL;
inserted->data = data;
p = GET(head,n-1);
if(p)
{
inserted->next = p->next;
p->next = inserted;
printf("insert successful!\n");
}else{
printf("insert fail\n");
}
}
void DELETE(LINKLIST *head,int n)
{
LINKLIST *p,*q;
p = GET(head,n-1);
if(p&&p->next)
{
q = p->next;
p->next = q->next;
free(q);
printf("delete success\n");
}else{
printf("delete fail\n");
}
}
int isEmpty(LINKLIST *head)
{
if(head->next)
return 1;
return 0;
}
void listPrint(LINKLIST *head)
{
LINKLIST *p;
p = head->next;
if(!p){
printf("連結串列有誤!請檢查後再列印\n");
return;
}
while(p){
printf("%c->",p->data);
p = p->next;
}
printf("\n");
}
int main()
{
LINKLIST *list = INITLIST();
int len = LENGTH(list);
listPrint(list);
printf("length=%d",len);
}