赞
踩
//Operation /* linklist_init_behind(head); //后插法建立链表 linklist_insert_e_behind(head,e); //插入元素e,后插 linklist_init_front(head); //前插法建立链表 linklist_insert_e_front(head,e); //插入元素e,前插 linklist_empty(head); //判断链表是否为空 linklist_clear(head); //清空链表 linklist_insert_i_behind(head,i,e); //在第i个位置插入元素 linklist_get_data(head,i); //获取第i个位置的数据 linklist_delete_location(head,i); //删除第i个位置的元素 linklist_search_e(head,e); //查找与数据e相等的元素 linklist_delete_e(head,e); //删除链表中的e linklist_print(head); //打印链表 */ #include<stdio.h> #include<malloc.h> #include<string.h> #define ok 0 #define no 1 typedef int datatype; typedef int status; typedef int lengthtype; typedef struct list{ datatype data; struct list *next; }list,*linklist; linklist linklist_init_behind(lengthtype length) { printf("后插法:请输入您的链表的元素:\n"); linklist head=(linklist)malloc(sizeof(list)); head->next =NULL;//创建头结点 lengthtype i; datatype e; linklist p; linklist q=head; for(i=0;i<length;i++) { scanf("%d", &e); p=(linklist)malloc(sizeof(list)); p->data=e; q->next=p; q=p; } q->next = NULL; return head; }//后插法建立链表 linklist linklist_init_front(lengthtype length) { printf("前插法:请输入您的链表的元素:\n"); linklist head=(linklist)malloc(sizeof(list)); head->next =NULL;//创建头结点 lengthtype i; datatype e; linklist p; for(i=0;i<length;i++) { scanf("%d", &e); p=(linklist)malloc(sizeof(list)); p->data=e; p->next=head->next; head->next=p; } return head; }//前插法建立链表 linklist linklist_insert_e_behind(linklist head,datatype e) { linklist q; q=head->next ; while(q->next !=NULL) { q=q->next ; } linklist p=q; p=(linklist)malloc(sizeof(list)); p->data =e; q->next =p; q=q->next ; q->next =NULL; return head; }//插入元素e,后插 linklist linklist_insert_e_front(linklist head,datatype e) { linklist p; p=(linklist)malloc(sizeof(list)); p->data=e; p->next=head->next; head->next=p; return head; }//插入元素e,前插 status linklist_empty(linklist head) { if(head->next==NULL) return ok; else return no; }//判断链表是否为空 linklist linklist_clear(linklist head) { while(head->next) { linklist p; p=head->next; head->next=p->next; free(p); } return head; } //清空链表 linklist linklist_insert_i_behind(linklist head,lengthtype i,datatype e) { linklist p=(linklist)malloc(sizeof(list)); linklist q=head; p->data=e; lengthtype t; for(t=0;t<i-1;t++) q=q->next; p->next=q->next; q->next=p; return head; }//在第i个位置插入元素 datatype linklist_get_data(linklist head,datatype i) { linklist q=head; lengthtype t; for(t=0;t<=i;t++) q=q->next; return q->data; }//获取第i个位置的数据 linklist linklist_delete_location(linklist head,lengthtype i) { linklist q=head; lengthtype t; for(t=0;t<i-1;t++) q=q->next; linklist p=q->next; q->next=p->next; return head; }//删除第i个位置的元素 lengthtype linklist_search_e(linklist head,datatype e,lengthtype locat[]) { lengthtype t=0;//数据的位置 lengthtype num_e=0;//与e相等的元素个数 linklist p=head->next; while(p) { if(p->data==e) { locat[num_e]=t; num_e++; } t++; p=p->next; } return num_e; }//查找与数据e相等的元素 linklist linklist_delete_e(linklist head,datatype e) { lengthtype locat[100]; lengthtype num_e; lengthtype t; num_e=linklist_search_e(head,e,locat); for(t=0;t<num_e;t++) head=linklist_delete_location(head,locat[t]); return head; }//删除链表中的e status linklist_print(linklist head) { printf("您的链表为:\n"); linklist p; p=head->next ; while(p) { printf("%d ",p->data ); p=p->next ; } printf("\n"); return ok; }//打印链表 int main() { linklist head;//创建头结点 datatype e;//数据元素 lengthtype i;//数据地址 lengthtype length;//链表长度 //菜单 printf("后插法:请输入您的链表的长度:\n"); scanf("%d",&length); head=linklist_init_behind(length); linklist_print(head); printf("后插法:请输入您要插入的数字:\n"); scanf("%d",&e); head=linklist_insert_e_behind(head,e); linklist_print(head); printf("请输入您要插入的位置及数字:\n"); scanf("%d%d",&i,&e); head=linklist_insert_i_behind(head,i,e); linklist_print(head); printf("请输入您要查找的数的位置:\n"); scanf("%d",&i); printf("您查找到的数据为:%d\n",linklist_get_data(head,i-1)); printf("请输入您要删除的数的位置:\n"); scanf("%d",&i); head=linklist_delete_location(head,i); linklist_print(head); lengthtype locat[100];//寻找的e的地址,用数组存储 lengthtype num_e;//相等于e的数的个数 printf("请输入您要查找的数e:\n"); scanf("%d",&e); num_e=linklist_search_e(head,e,locat); printf("与e相等的元素个数为:%d\n",num_e); if(num_e!=0) { printf("位置分别为:"); for(i=0;i<num_e;i++) printf("%d ",locat[i]+1); printf("\n"); } printf("请输入您要删除的数据e:"); scanf("%d",&e); head=linklist_delete_e(head,e); linklist_print(head); printf("现在清空链表\n"); head=linklist_clear(head); if(linklist_empty(head)==ok) printf("您的链表为空!\n"); printf("前插法:请输入您的链表的长度:\n"); scanf("%d",&length); head=linklist_init_front(length); linklist_print(head); printf("前插法:请输入您要插入的数字:\n"); scanf("%d",&e); head=linklist_insert_e_front(head,e); linklist_print(head); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。