#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Node
{int data;
struct Node* next;
}linklist;
linklist *head,*p;
linklist *CREATLISTRO()//尾插法建立单链表
{
char ch;
linklist *head,*s,r;
head=NULL;
r=NULL;
printf("开始建立单链表输入$结束\n");
ch=getchar();
while(ch!='$')
{
s=(linklist)malloc(sizeof(linklist));
s->data=ch;
if(head==NULL)
head=s;
else
r->next=s;
r=s;
ch=getchar();
}
if(r!=NULL)
r->next=NULL;
return head;
}
///
//输出单链表/1
void ShowList(linklist *head)
{
linklist *p;
printf("输出单链表:"); p=head;
if(head->next==NULL)
printf("表为空\n");
else
while(p!=NULL)
{
printf(" %c ",p->data);
p=p->next;
}
printf("\n");
}
//求单链表长度//
void LENGTH(linklist *head)
//求长度
{
int n=0;
linklist *p;
p=head;
if(head->next==NULL)
printf("表为空\n");
else
while(p->next!=NULL)
{
n++;
p=p->next;
}
printf("\n该单链表的长度为:%d\n",n+1);
}
linklist GET(linklisthead,int i)
{
int j;
linklist *p;
p=head;
j=0;
while((p->next!=NULL)&&(j<i))
{
p=p->next;
j++;
}
if(i==j)
return p;
else
return NULL;
}
linklist LOCATE(linklisthead,int key)
{
linklist *p;
p=head->next;
while(p!=NULL)
if(p->data!=key)
p=p->next;
else break;
return p;
}
linklist INSERTBEFORE(linklisthead)//前插
{
linklist *s,q;
int i;
int x;
printf("\n请输入插入的结点:");
getchar();
scanf("%c",&x);
printf("请输入插入的位置:");
scanf("%d",&i);
getchar();
p=GET(head,i);
s=(linklist)malloc(sizeof(linklist));
s->data=x;
q=head;
while(q->next!=p)
q=q->next;
s->next=p;
q->next=s;
printf("插入成功!\n");
return head;
}
void *DELETE(linklist *head,int i)
{
linklist *p,*r;
int j;
j=i-1;
//j=i-1;
p=GET(head,j);
if((p!=NULL)&&(p->next!=NULL))
{
r=p->next;
p->next=r->next;
free(r);
printf("\n删除成功!");
}
else
printf("error!");
}
int main()
{
int j=1,g=1,h=1;
int i=1;
int n,key;
head=CREATLISTRO();
ShowList(head);
printf("请输入须查找位置:");
scanf("%c",&n);
p=GET(head,n);
getchar();
printf("在%d位置上的结点为:%c\n",n,p->date);
LENGTH(head);
INSERTBEFORE(head);
ShowList(head);
printf("请输入删除的结点:\n");
scanf("%d",&i);
p=DELETE(head,i);
ShowList(head);
getchar();
}
scanf("%c",&n)改为
scanf("%d",&n);