当前位置:文档之家› 链表基础操作(含菜单选择)

链表基础操作(含菜单选择)


} q->next=NULL;
return(head); }
NODE *CreateDefaultList() {
NODE *head,*q,*p; int num=10; int n=4;
//创建链表
head=(NODE*)malloc(sizeof(NODE)); q=head;
if(n>0){ while(n>0) { p=(NODE*)malloc(sizeof(NODE)); p->data = num; q->next = p; q = p; num = num + 10; n--; }
while(n!=0 && n!=1) {
printf("非法输入!\n"); scanf("%d", &n); }
if(n == 0) {
a=CreateDefaultList(); printf("\n"); menu(a); }else{
a=CreateList(); printf("\n"); menu(a); }
while(p!=NULL)
{
printf("%5d —>",p->data);
p=p->next;
}
printf("NULL");
}
void NizhiList(NODE *head) {
NODE *p,*q; p = head->next; q = NULL;
//链表逆置
if(p==NULL) {
}else if(p==NULL){ q->next = r; r->next = p;
}else {
r->next = p; q->next = r; }
}
void PrintList(NODE *head)
//打印链表
{
NODE *p;
p=head->next;
printf("打印链表如下:\n");
#include <stdio.h> #include <stdlib.h> #include <malloc.h>
typedef struct node {
int data; struct node *next; }NODE;
//定义数据结构
NODE *CreateList() {
NODE *head,*q,*p; int a,n;
int n = 0;
scanf("%d", &n); while(n<0 || n>5) {
printf("非法输入!\n"); scanf("%d", &n); } switch(n) {
case 1: PrintList(head); printf("\n"); menu(head); break;
case 2:
} }
InsertList(head); printf("\n"); menu(head); break; case 3: NizhiList(head); printf("\n"); menu(head); break; case 4: DelList(head); printf("\n"); menu(head); break;
p->next = q->next; q = p->next; }else{ p = q; q = p->next; } } }
void menu(NODE *head) {
printf("键入 1:打印单链表\n"); printf("键入 2:在有序单链表中插入元素 x\n"); printf("键入 3:单链表就地逆置\n"); printf("键入 4:在有序单链表中删除所有值大于 mink 且小于 maxk 的元素\n"); printf("请选择你要进行的操作—>\n");
return 0; }
r=(NODE*)malloc(sizeof(NODE)); r->data = numInsert;
while(p!=NULL && p->data <= r->data) {
q = p; p = q->next; }
if(q==NULL){ r->next = p; head->next = r;
printf("链表为空!"); }else{
q=p->next; }
p->next = NULL;
while(q!=NULL) {
head->next = p; p = q; q = p->next; p->next = head->next; } head->next = p;
}
void DelList(NODE *head) //在有序单链表中删除所有值大于 mink 且小于 maxk 的元素 {
printf("链表为空!"); }else{
q=p->next; }
if(p!=ห้องสมุดไป่ตู้ULL && q==NULL)
{ if(p->data>mink && p->data<mink) { head->next = NULL; }
}
while(q!=NULL) {
if(q->data>mink && q->data<maxk) {
int main()
{
printf("********************************\n");
printf("*
链表操作演示
*\n");
printf("********************************\n\n\n");
int n = 0; NODE *a; printf("请选择使用默认创建的链表(0)或是自行创建链表(1)\n"); printf("默认链表为:10->20->30->40\n"); scanf("%d", &n);
} q->next=NULL;
return(head); }
void InsertList(NODE *head) {
NODE *p,*q,*r; int numInsert; p = head->next; q=NULL;
//插入数据
printf("请输入想插入的数字:\n"); scanf("%d", &numInsert);
NODE *p,*q; int mink,maxk; printf("请输入 mink:"); scanf("%d", &mink); printf("请输入 maxk:"); scanf("%d", &maxk);
if(maxk<mink) {
printf("非法输入!"); }
p = head->next; q = NULL; if(p==NULL) {
待评审代码:链表的基本操作
从键盘读入 n 个整数(升序),请编写算法实现: (1) CreateList():建立带表头结点的单链表; (2) PrintList():显示单链表,(形如:H->10->20->30->40); (3)InsertList():在有序单链表中插入元素 x; (4) NizhiList():单链表就地逆置; (5)DelList():在有序单链表中删除所有值大于 mink 且小于 maxk 的元素。
//创建链表
head=(NODE*)malloc(sizeof(NODE)); q=head;
printf("您想输入几个数字:\n"); scanf("%d",&n);
if(n>0){ printf("请输入数字:\n"); while(n>0) { scanf("%d",&a); p=(NODE*)malloc(sizeof(NODE)); p->data=a; q->next=p; q=p; n--; }
相关主题