循环单链表
来源:互联网 发布:机房 蓝屏 网络攻击 编辑:程序博客网 时间:2024/05/19 07:10
#include<stdio.h>#include<stdlib.h>typedef struct node{int data; struct node*next;}Snode;Snode* creat()//创建头结点{int n,i,x;Snode *s,*t; Snode *head; head=(Snode*)malloc(sizeof(Snode));head->next=NULL;head->data=0;t=head;printf("请输入要插入的结点数:\n"); scanf("%d",&n); if(n!=0) {printf("请输入%d个结点数的值\n",n); for(i=0;i<n;i++) { scanf("%d",&x); s=(Snode*)malloc(sizeof(Snode)); s->data=x; s->next=t->next; t->next=s; t=s; }t->next=head;//和循环双向链表一样 在这改就行了 } return head;}int lenth(Snode *l)//求链表的长度{ int len=0;Snode *s=l;while(s->next!=l){len++;s=s->next;}return len;}Snode *get(Snode *l,int i)//取单链表表中第i个结点地址{ int len=0; Snode *s=l;while(s->next!=l&&len!=i){len++;s=s->next;}return s;}void insnode(Snode *l,int i,int x)//把x的值插入到指定的位置i{ Snode *s,*t; if(i<=lenth(l)) { s=(Snode*)malloc(sizeof(Snode)); s->data=x; t=get(l,i-1); s->next=t->next; t->next=s; } else printf("链表中没有第%d个位置\n",i);}void delnode(Snode *l,int i)//删除指定位置i的结点{ Snode *s,*t; if(i<=lenth(l)) { t=get(l,i-1); s=t->next; t->next=s->next; free(s); } else printf("链表中没有第%d个位置\n",i);}int locate(Snode *l,int x)//按值查找{ int flag=-1; Snode *s=l; while(s->next!=l)//同上要改{if(s->data==x){flag=1;break;}else s=s->next;} return flag;}void display(Snode *l)//显示链表{ Snode *s=l->next; while(s!=l)//同上也要改 { printf("%d ",s->data); s=s->next; } printf("\n");}int main(){Snode *s; int i,x; char c; while(1) { printf("************************\n"); printf("* *\n"); printf("* 1 链表初始化 *\n"); printf("* 2 链表指定插入 *\n"); printf("* 3 链表指定删除 *\n"); printf("* 4 链表按值查询 *\n"); printf("* 5 退出 *\n"); printf("************************\n"); c=getchar(); if(c=='5')break; else switch(c) { case '1':s=creat();; printf("初始化后的链表:\n"); display(s);break; case '2':printf("请输入要插入的位置和值\n"); scanf("%d%d",&i,&x); insnode(s,i,x); printf("插入指定位置值后的链表:\n"); display(s); break; case '3':printf("请输入要删除的位置\n"); scanf("%d",&i); delnode(s,i); printf("删除指定位置值后的链表:\n"); display(s); break; case '4':printf("请输入要按值查询的值\n"); scanf("%d",&x); if(locate(s,x)!=-1) printf("在链表中查到了\n"); else printf("没有查到\n"); break; } getchar();}return 0;}