结构体链表

来源:互联网 发布:欧美经典犯罪电影知乎 编辑:程序博客网 时间:2024/06/15 03:32

今天写了一下结构体链表,相比顺序链表而言,要相对复杂,但其中没有合并操作,以后在写,这个结构体链表不够成熟,但相对简单的操作还是可行的,下面是代码:

//结构体实现聊表//提供如下操作 1制空(Making_empty),2判空(Is_empty),4插入(Insert_sag),5查找(Search_sag),6删除(Delete_sag),8退出(exit),7合并(Connect_two_sag)#include <stdio.h>#include <stdlib.h>typedef int data_type;typedef struct Por{data_type data;struct Por *next;}sag,*sag_head;void Making_empty(sag *&);bool Is_empty(sag *&);void Insert_sag(sag *&,data_type);void Search_sag(sag *&,data_type);void Delete_sag(sag *&,data_type);//void Connect_two_sag(sag *,sag *,sag *);int main(){sag_head head=NULL;data_type data;while(true){printf("选择你的命令:\n \   1-------制空  \n \   2-------插入  \n \   3-------查找  \n \   4-------删除  \n \   5-------合并  \n \   6-------退出  \n");int trag;scanf("%d",&trag);switch(trag){case 1: Making_empty(head);break;case 2: printf("print you wanted data: \n");scanf("%d",&data);Insert_sag(head,data);break;case 3:printf("print your searching data: \n");scanf("%d",&data);Search_sag(head,data);break;case 4:printf("print your deleting data: \n");scanf("%d",&data);Delete_sag(head,data);break;case 5://Connect_two_sag(head1,head2,head);break;case 6:printf("are you really want to exit Y(y) / N(n)\n");char ch;getchar();ch=getchar();while(ch==' ' && ch!=EOF)ch=getchar();switch(ch){case 'Y': case 'y':exit(0);case 'N': case 'n':printf("\n");break;} break;default:printf("wrong,enter the new operating number\n");}}}void Making_empty(sag *&p){   sag_head q=p;   while(q!=NULL){   p=p->next;   free(q);   q=p;   }}bool Is_empty(sag *&p){return p==NULL;}void Insert_sag(sag *&p,data_type x){sag_head q=(sag_head)malloc(sizeof(*q));q->data=x;//printf("%d\n",q->data);sag_head pre=NULL,cur=p;for( ;  cur!=NULL &&  cur->data<q->data;pre=cur,cur=cur->next);if(pre==NULL){q->next=p;p=q;//printf("%d\n",p->data);return ;}pre->next=q;q->next=cur;}void Search_sag(sag *&p,data_type x){//printf("%d\n",);int i=1;for(sag_head q=p;q!=NULL;q=q->next,i++)if(q->data==x){printf("exists in %d\n",i);return ;}printf("no exists\n");}void Delete_sag(sag *&p,data_type x){if(Is_empty(p)){printf("sag empty! \n");return ;}sag_head pre=NULL,cur=p;for( ;cur->data!=x && cur!=NULL;pre=cur,cur=cur->next);if(pre==NULL){p=p->next;free(cur);return ;}if(cur==NULL){printf("%d no exist in sag\n",&x);return ;}pre->next=cur->next;free(cur);}


原创粉丝点击