单链表的增删查改
-
-
#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;
}