#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}LNode,*LinkList;
void print(LinkList head);
LinkList createTail();
LinkList createHead();
int length(LinkList head);
int insertAfter(LinkList head,int i,ElemType item);
int del(LinkList head,int i);
int main()
{
printf("欢迎进入链表操作子系统!\n");
printf("1.创建链表-尾插法\n");
printf("2.创建链表-头插法\n");
printf("-------------------------------\n");
printf("3.输出链表\n");
printf("4.求链表的长度\n");
printf("5.在链表第i个结点后插入一个数据域为item的新结点\n");
printf("6.删除链表的第i个结点\n");
printf("7.预留功能1\n");
printf("8.预留功能2\n");
printf("9.预留功能3\n");
printf("10.退出系统\n");
int choice;
LinkList head = NULL;
while(~scanf("%d",&choice))
{
switch(choice)
{
case 1: printf("1.创建链表-尾插法\n");
head = createTail();
break;
case 2: printf("2.创建链表-头插法\n");
break;
case 3: printf("3.输出链表\n");
print(head);
break;
case 10: printf("系统即将退出,欢迎再次使用!\n");
break;
}
if(choice = 10)
break;
}
return 0;
}
void print(LinkList head)
{
if(head == NULL)
{
printf("链表为空!\n");
return;
}
LinkList p = head;
while(p -> next != NULL)
{
printf("%c->",p -> data);
p = p -> next;
}
printf("%c\n",p -> data);
}
LinkList createTail()
{
LinkList head = NULL,tail,p;
char ch;
while(~scanf("%c",&ch))
{
if(ch == '#')
break;
if(ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n')
continue;
p = (LinkList)malloc(sizeof(LNode));
p -> data = ch;
p -> next = NULL;
if(head == NULL)
head = p;
else
tail -> next = p;
tail = p;
}
return head;
}
LinkList createHead()
{
LinkList head = NULL,p;
char ch;
while(~scanf("%c",&ch))
{
if(ch == '#')
break;
if(ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n')
continue;
p = (LinkList)malloc(sizeof(LNode));
p -> data = ch;
p -> next = NULL;
head = p;
}
return head;
}
int length(LinkList head)
{
int len;
LinkList p = head;
while(p -> next != NULL)
{
len ++;
p = p -> next;
}
return len;
}
int insertAfter(LinkList head,int i,ElemType item)
{
LinkList p = head,s;
int k;
while((p != NULL) && (k < i-1))
{
p = p -> next;
k++;
}
if(p == NULL || k > i+1)
return -1;
else
{
s = (LinkList)malloc(sizeof(LNode));
s -> data = item;
s -> next = p->next;
p -> next = s;
return 1;
}
}
int del(LinkList head,int i)
{
LinkList p = head,s;
int k;
while((p != NULL) && (k < i-1))
{
p = p -> next;
k++;
}
if(p == NULL || k > i+1)
return -1;
else if(p -> next = NULL)
return -1;
else
{
s = p -> next;
p -> next = s -> next;
free(s);
return 1;
}
}
int searchNode(LinkList head,ElemType target)
{
LinkList p = head;
int t = 0;
while(p != NULL)
{
t++;
if(p -> data == target)
return t;
p = p -> next;
}
return -1;
}