版权声明:未经原作者允许不得转载本文内容,否则将视为侵权 https://blog.csdn.net/springhammer/article/details/88617783
数据结构-链表操作(创建、输出、查找、插入、删除等) C语言源码
#include<stdio.h>
#include<stdlib.h>
typedef char datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist;
linklist *head,*p;
//头插法建立单链表
linklist *Creatlistf()
{
char ch;
linklist *head,*s;
head=NULL;
ch=getchar();
printf("请输入顺序表元素(数据以*结束):\n");
while(ch!='*')
{
s=(linklist *)malloc(sizeof(linklist));
s->data=ch;
s->next=head;
head=s;
ch=getchar();
}
return head;
}
//按序号查找结点
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;
}
//按值查找结点
linklist *Locate(linklist *head,datatype key)
{
int pos=0;
p=head->next;
printf("查找结点位置为:");
while(p!=NULL)
{
if(p->data!=key)
{
p=p->next;
pos++;
}
else
{
pos++;
break;
}
}
return p;
}
void Insertafter(linklist *p,datatype x)
{
linklist *s;
s=(linklist *)malloc(sizeof(linklist));
s->data=x;
s->next=p->next;
p->next=s;
printf("插入成功");
}
//前插结点
void Insertbefore(linklist *p,datatype x)
{
linklist *s;
s=(linklist *)malloc(sizeof(linklist));
s->next=p->next;
s->data = p->data;
p->data=x;
p->next=s;
}
//删除结点
linklist *Deleteafter(linklist *head)
{
int i;
linklist *r,*p;
printf("请输入要删除的结点位置:");
scanf("%d",&i);
if(i==0){
printf("无该位置\n");
}
else if(i==1)
{
r=head;
head=head->next;
}
else
{
p=Get(head,i-1);
r=p->next;
p->next=r->next;
}
free(r);
return head;
}
//输出单链表
void output(linklist *p)
{
while(p->next!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
main()
{
linklist *head;
int k,i,pos;
char x;
datatype key;
printf("单链表的操作:\n");
printf("\t1.头插法建立单链表\n");
printf("\t2.输出单链表\n");
printf("\t3.按序号查找结点\n");
printf("\t4.按值查找结点\n");
printf("\t5.前插结点\n");
printf("\t6.删除结点\n");
printf("\t7.退出\n");
do
{
printf("选择所需功能: ");
scanf("%d",&k);
switch(k)
{
case 1:head=Creatlistf();
break;
case 2:printf("单链表为:\n");
output(head);
break;
case 3:printf("请输入要查找的结点序号: ");
scanf("%d",&i);
getchar();
printf("结点的值为:%c\n",Get(head,i-1)->data);
break;
case 4:printf("请输入要查找的结点值: ");
scanf("%c",&key);
getchar();
printf("%d",Locate(head,key));
printf("\n");
break;
case 5:
printf("输入要插入的结点位置(从1号位开始插):");
scanf("%d",&pos);
if(pos==0)
{
printf("无该位置\n");break;
}
getchar();
printf("请输入插入的结点值:");
scanf("%c",&x);
getchar();
Insertbefore(Get(head,pos-1),x);
printf("插入成功\n");
break;
case 6:
head=Deleteafter(head);
break;
case 7:printf("退出");
exit(0);
default:printf("输入错误\n");
exit(0);
}
}while(1);
}
快看,这才是重点!我想能看到这里的同学,无外乎两种人:来拷贝代码的人 和 来拷贝代码的人。
但,在拷贝走的时候,你要想清楚一件事,把代码拷走之后有个蛋用,搞明白对你来说才是最重要的。
好了,就酱紫。
老铁,这要是都不赞,说不过去吧!!!哦,对了,你这么好看,关注一下呗。。。
最后对自己说:
你现在所遭遇的每一个不幸,都来自一个不肯努力的曾经。