您好,欢迎来到好土汽车网。
搜索
您的当前位置:首页数据结构实验二(单链表的基本操作)

数据结构实验二(单链表的基本操作)

来源:好土汽车网
#include

#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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务