#include #include /*单链表的定义: */ typedef int DataType; typedef struct node { DataType data; struct node *next; }ListNode,*LinkList; DataType data; void Print1(LinkList head) { /*打印元素*/ ListNode *p=head->next; while(p) { printf(\"%3d\ p=p->next; } printf(\"\\n\"); } void InitList(ListNode *head) { head->next=NULL; } LinkList create_1(LinkList head) /*单链表的初始化*/ /*单链表的创建*/ { int x; ListNode *p,*q; q=head; printf(\"请输入你要创建的数据:\\n\"); scanf(\"%d\ while(x!=0) { p=(ListNode *)malloc(sizeof(ListNode)); p->data=x; p->next=NULL; q->next=p; q=p; printf(\"是否继续创建新数据?若要停止,请按0结束!\\n\"); scanf(\"%d\ } return head; } int Length(ListNode *head) { int i=0;ListNode *p; p=head->next; while(p) { i++; p=p->next; /*求线性表的长度*/ } return i; } DataType Get(LinkList head,int i) { ListNode *p=head->next; int j=0; if(i<0 || i>Length(p)) return NULL; while(p->next && j{ j++; p=p->next; /*读单链表的第i个结点的值*/ } if(j==i) return p->data; else return NULL; } ListNode *Locate(LinkList head,DataType x) { ListNode *p=head->next; while(p!=NULL && p->data!=x) p=p->next; if(p!=NULL) { /*查找单链表中值为x的结点*/ printf(\"已找到该元素!\\n\"); return head; } else { printf(\"对不起,找不到该元素!\\n\"); return NULL; } } insert_before(ListNode *head,DataType x,int i) { ListNode *s,*p,*q; int j =0; /*单链表的前插算法一*/ s=(ListNode *)malloc(sizeof(ListNode)); s->data=x; s->next=NULL; q=head; if(i<0 || i>Length(q)) { printf(\"插入失败!\\n\"); return NULL; } while(j{ p=q; q=q->next; j++; } s->next=p->next; p->next=s; printf(\"插入后得到得数据为:\\n\"); Print1(head); return 1; } Delete(ListNode *head,DataType x) { ListNode *p,*t; p=head; while(p->data!=x && p) /*删除值为x的结点的算法*/ { t=p; p=p->next; } if(p) { t->next=p->next; free(p); return 1; } else return 0; } main() { int i; char m; LinkList L,j; L=(ListNode *)malloc(sizeof(ListNode)); system(\"color 3f\"); printf(\" 菜单列表 \\n\"); printf(\"\┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\\n\"); printf(\"\┃************************************************************┃\\n\"); printf(\"\┃* * *┃\\n\"); printf(\"\┃* 1.链表的初始化 * 2.链表的建立 *┃\\n\"); printf(\"\┃* * *┃\\n\"); printf(\"\┃************************************************************┃\\n\"); printf(\"\┃* * *┃\\n\"); printf(\"\┃* 3.求链表的长度 * 4.读取表元素 *┃\\n\"); printf(\"\┃* * *┃\\n\"); printf(\"\┃************************************************************┃\\n\"); printf(\"\┃* * *┃\\n\"); printf(\"\┃* 5.查找 * 6.插入 *┃\\n\"); printf(\"\┃* * *┃\\n\"); printf(\"\┃************************************************************┃\\n\"); printf(\"\┃* * *┃ \\n\"); printf(\"\┃* 7.删除 * 0.退出 *┃\\n\"); printf(\"\┃* * *┃\\n\"); printf(\"\┃************************************************************┃\\n\"); printf(\"\┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\\n\"); while ((m='0')&&(m='1')&&(m='2')&&(m='3')&&(m='4')&&(m='5')&&(m='6')&&(m='7')) { printf(\"\\n请选择你需要操作的步骤(0至7):\"); fflush(stdin); scanf(\"%c\ switch(m) { case '0': { exit(0); break; } case '1': { InitList(L); break; } case '2': { j=create_1(L); Print1(L); break; } case '3': { printf(\"该表的长度为:%d\\n\ break; } case '4': { printf(\"请输入数据的位置:\\n\"); scanf(\"%d\ data=Get(L,i); printf(\"\\n\"); printf(\"查找的数据的位置是:%d\\n\ break; } case '5': { printf(\"请输入要查找数据:\"); scanf(\"%d\ j=Locate(j,data); printf(\"\\n\"); break; } case '6': { printf(\"请输入将要插入的数据和位置:\"); scanf(\"%d%d\ insert_before(L,i,data); break; } case '7': { printf(\"请输入将被删除的数据:\"); scanf(\"%d\ Delete(j,i); Print1(L); break; } } } return 0; } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- howto234.com 版权所有 湘ICP备2022005869号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务