C语言单链表常见操作系列

来源:互联网 发布:淘宝介入买家输了可以 编辑:程序博客网 时间:2024/06/11 03:47
#include<stdio.h>#include<stdlib.h>//定义单链表结构体typedef int ElemType;typedef struct Node{ElemType data;struct Node *next;}LNode,*LinkList;//创建单链表void Build(LinkList L){int n;LinkList p,q;p=L;printf("请输入n和n个元素:\n");scanf("%d",&n);while(n--){q=(LinkList)malloc(sizeof(LNode));scanf("%d",&q->data);q->next = NULL;p->next=q;p=q;}}//求单链表的长度void LinkLength(LinkList L){int num = 0;LinkList p;p=L->next;while(p){num++;printf("%3d",p->data);p=p->next;}printf("长度为:%d",num);}//查找前驱结点void Find(LinkList L,int x){LinkList p,q;p=L;while(p->next &&p->next->data!=x)p=p->next;if(p->next)printf("%d的前驱结点为%d",x,p->data);elseprintf("没有找到");}//删除结点值为x的元素void Delete(LinkList L,int x){LinkList p,q;p=L;while(p->next && p->next->data!=x)p=p->next;if(p->next){q=p->next;p->next=q->next;free(q);}printf("删除成功!!");}//将表中的元素逆置void Reverse(LinkList L){LinkList p,q;p=q=L->next;L->next=NULL;while(p){q=q->next;p->next=L->next;L->next=p;p=q;}printf("逆置成功!!");}//对单链表排序void sort(LinkList L){LinkList p,q;int temp;p=L;for(p=L;p->next!=NULL;p=p->next){for(q=p->next;q!=NULL;q=q->next)if(p->data>q->data){temp=p->data;p->data=q->data;q->data=temp;}}printf("排序成功!");}//删除相同元素void Deletesameelem(LinkList L){LinkList p,q,s;p=L;q=L->next;while(q->next){if(q->data ==q->next->data){p->next=q->next;s=q;q=q->next;free(s);}else{p=p->next;q=q->next;}}printf("删除成功!!");}//在升序链表中,插入新的元素,扔有序void Insert(LinkList L,LinkList p){LinkList s;s=L;while(s->next && s->next->data<p->data)s=s->next;p->next=s->next;s->next=p;}//提示界面显示void Tips(){printf("\n");printf("根据按键选择相应的操作:\n");printf("<1>输出单链表及其长度:\n");printf("<2>查找值为x的直接前驱结点:\n");printf("<3>删除值为x的结点:\n");printf("<4>将表中的元素逆置:\n");printf("<5>将单链表由小到大进行排序:\n");printf("<6>删除表中相同的元素:\n");printf("<7>在升序链表中插入元素x:\n");printf("<0>退出:\n");}//主函数void main(){int op,x;LinkList L,p;L = (LinkList)malloc(sizeof(LNode));L->next=NULL;L->data=-1;Build(L);Tips();scanf("%d",&op);while(op){switch(op){case 1:LinkLength(L);break;case 2:printf("请输入要查找的元素x:\n");scanf("%d",&x);Find(L,x);break;case 3:printf("请输入要删除的元素x:\n");scanf("%d",&x);Delete(L,x);break;case 4:Reverse(L);break;case 5:sort(L);break;case 6:Deletesameelem(L);break;case 7:printf("请输入要插入的元素X:\n");scanf("%d",&x);p=(LinkList)malloc(sizeof(LNode));p->data=x;Insert(L,p);printf("插入成功!!!\n\n");break;}scanf("%d",&op);}}


0 0
原创粉丝点击