单链表的增删查改
程序员文章站
2022-04-05 09:33:22
...
#include<stdio.h> #include<stdlib.h> typedef struct Node{ char ch; struct Node * next; }Node,*Linklist; int num; //查找给定值的结点,返回结点指针 Node * findValue(char c,Node * head){ Node * p=head->next; while(p->next!=NULL){ if(p->ch==c) return p; else p=p->next; } return head; } //查找给定位置的结点的值 char findIndex_Value(Node * head,int index){ int count=0; Node * p=head->next; for(int i=1;i<index;i++){ p=p->next; } return p->ch; } //在给定位置插入一个结点 void insertP(Node *head,int index){ if(index<0||index>4+1){ printf("插入操作非法\n"); }else{ Node *p=head; index--; while(p->next!=NULL&&index!=0){ p=p->next; index--; } Node *s=(Node *)malloc(sizeof(Node)); s->ch='j'; s->next=p->next; p->next=s; } } //修改给定位置的结点值 void setP(Node *head,int index){ if(index<0||index>4+1){ printf("操作非法\n"); }else{ Node *p=head; index--; while(p->next!=NULL&&index!=0){ p=p->next; index--; } p->next->ch='g'; } } //删除给定位置的结点 void deleteP(Node *head,int index){ if(index<0||index>4){ printf("操作非法\n"); }else{ Node *p=head; index--; while(p->next!=NULL&&index!=0) { p=p->next; index--; } Node *s=p->next; p->next=s->next; s->next=NULL; free(s); } } //建立一个单链表 Node * createLinkList(int num){ char c; Linklist L=(Linklist)(malloc)(sizeof(Linklist)); L->ch=NULL; L->next=NULL; Node * r=L; Node *s; for(int i=0;i<num;i++){ s=(Node *)malloc(sizeof(Node)); if(s==NULL){ printf("不能分配空间\n"); exit(0); }else{ //printf("请输入第%d个节点值\n",i+1); switch(i){ case 0:s->ch='a';break; case 1:s->ch='b';break; case 2:s->ch='c';break; case 3:s->ch='d';break; } //s->ch='a'; r->next=s; r=s; } } r->next=NULL; return L; } //输出单链表 void procOutput(Node * L){ Node * p=L->next; while(p->next!=NULL){ printf("%c ",p->ch); p=p->next; } printf("\n"); } int main(){ Linklist L=createLinkList(5); Node * p1=findValue('c',L); printf("%c\n",p1->ch); char cha=findIndex_Value(L,3); printf("%c\n",cha); deleteP(L,3); procOutput(L); insertP(L,3); procOutput(L); setP(L,3); procOutput(L); return 0; }
上一篇: php中echo和print的区别是什么
下一篇: php加密之discuz内容经典加密方式