33,008
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char data ;
struct node *next ;
}List ;
List *create() ;
void out_print(List *head) ;
void do_insert(List *head) ;
void do_delet(List *head) ;
int length(List *head) ;
void do_delet_2(List *head) ;
void main()
{
List *head ;
head=create() ;
out_print(head) ;
printf("\n") ;
do_insert(head) ;
out_print(head) ;
printf("\n") ;
do_delet(head) ;
out_print(head) ;
printf("\n") ;
do_delet_2(head) ;
out_print(head) ;
printf("\n") ;
}
int length(List *head)
{
int i=0 ;
List *p ;
for(p=head->next; p; p=p->next)
i++ ;
return i ;
}
void do_delet(List *head)
{
List *p, *pre ;
int k, count=0 ;
printf("删除操作::\n") ;
p=head ;
if(!p->next) {
printf("表空\n") ;
return ;
}
printf("输入删除位置:") ;
scanf("%d", &k) ; getchar() ; //吸收键盘缓冲
if(k<=0||k>length(head)) {
printf("ERROR->越界\n") ;
exit(1) ;
}
while(p&&count<k) {
pre=p ;
p=p->next ;
count++ ;
}
pre->next=p->next ;
free(p) ;
}
void do_delet_2(List *head)
{
List *p, *pre ;
int count=0 ;
char x ;
printf("删除操作::\n") ;
p=head ;
if(!p->next) {
printf("表空\n") ;
return ;
}
printf("输入插入元素(字符型):") ;
scanf("%c", &x) ; getchar() ; //吸收键盘缓冲
while(p&&p->data!=x) {
pre=p ;
p=p->next ;
}
pre->next=p->next ;
free(p) ;
}
void do_insert(List *head)
{
List *p, *pre, *q ;
int k, count=0 ;
char x ;
pre=p=head ;
printf("插入操作::\n") ;
printf("输入插入位置:") ;
scanf("%d", &k) ; getchar() ; //吸收键盘缓冲
printf("输入插入元素(字符型):") ;
scanf("%c", &x) ; getchar() ; //吸收键盘缓冲
while(p&&count<k) {
pre=p ;
p=p->next ;
count++ ;
}
if(!(q=(List *)malloc(sizeof(List)))) {
printf("ERROR->分配空间失败\n") ;
exit(1) ;
}
q->data=x ;
q->next=pre->next ;
pre->next=q ;
}
List *create()
{
List *head, *rear, *p ;
int i ;
head=rear=(List *)malloc(sizeof(List)) ;
if(!head) {
printf("ERROR\n") ;
exit(1) ;
}
for(i=0; i<10; i++) {
p=(List *)malloc(sizeof(List)) ;
p->data='a'+i ;
rear->next=p ;
rear=p ;
}
rear->next=NULL ;
return head ;
}
void out_print(List *head)
{
List *p ;
p=head->next ;
printf("元素为:") ;
while(p) {
printf("%5c", p->data) ;
p=p->next ;
}
}