#include <stdio.h>
#include <stdlib.h>
typedef char datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist; /*尾插入法建立带头结点的单链表,返回表头指针*/
linklist *createlist()
{
char ch;
linklist *head,*s,*r; /*head作为表头,s作为新结点,r作为尾结点*/
head=(linklist*)malloc(sizeof(linklist)); /*生成头结点head*/
r=head;
printf("请输入字符产生链表,以#结束\n"); /*尾指针指向头结点*/
ch=getchar();
while(ch!='#') /*"#"为输入结束符*/
{
s=(linklist*)malloc(sizeof(linklist)); /*生成新结点*s*/
s->data=ch;
r->next=s; /*新结点s连接到前面建立的链表尾部*/
r=s; /*尾指针r指向新的链表尾部*/
ch=getchar();
}
r->next=NULL;
return head; /*返回表头指针*/
}
/*在带头结点的单链表head中查找第i个结点,若找到,则返回该结点的存储位置;否则返回NUULL*/
linklist *get(linklist *head,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;
}
/*删除第i个结点*/
linklist *deletelink(linklist* head, int i)
{
linklist *p=head, *q;
int j;
for (j = 0; p->next != NULL;)
{
j++;
if (j == i)
{
q = p->next;
p->next = q->next;
return head;
}
else
{
p = p->next;
}
}
printf("error\n");
return head;
}
/*第i后插入的序号和字符*/
void *insertById(linklist *head,int i,char x)
{
linklist *s,*p;
int j;
s=(linklist*)malloc(sizeof(linklist));
s->data=x;
p=head;j=0;
while(p!=NULL&&j<i)
{
j++;p=p->next;
}
if(p!=NULL)
{
s->next=p->next;
p->next=s;
return head;
}
else printf("结点未找到!\n");
return head;
}
/*主函数*/
int main()
{
linklist *head,*r;
int num;
head = createlist();
printf("链表信息为:");
r=head->next;
while(r)
{
printf("%c",r->data);
r=r->next;
}
printf("\n");
printf("请输入要查询的序号:\n");
scanf("%d",&num);
r=get(head,num);
if(r==NULL)printf("没有查到\n");
else
printf("查找的结果为:%c\n",r->data);
/*****************************/
printf("请输入要删除的序号:\n");
int i;
scanf("%d",&i);
head=deletelink(head,i);
printf("删除后链表信息为:");
r=head->next;
while(r)
{
printf("%c",r->data);
r=r->next;
}
/*****************************/
printf("\n");
printf("请输入要插入的序号和字符:\n");
int N;
char x;
scanf("%d " ,&N);
x=getchar();
head=insertById(head,N,x);
printf("插入后链表信息为:");
r=head->next;
while(r)
{
printf("%c",r->data);
r=r->next;
}
/*****************************/
}
06-20
08-07
140
08-07
141
08-04
704
07-27