有关单链表问题,学的太渣,求教大神
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关单链表问题,学的太渣,求教大神相关的知识,希望对你有一定的参考价值。
编写程序,建立一个有序递增的整型单链表,实现(1)向表中插入任意元素后仍然是有序表;(2)删除该表中大于x小于y的所有元素。
我编的,错在哪了?
#include<stdio.h>
#include<stdlib.h>
#include <malloc.h>
typedef struct LNode
int data;
struct LNode *next;
LNode, *LinkList; //结构体类型定义
void Insert_list(LinkList L,int m)
LinkList p=L,s;
int j=0;
printf("请输入插入的一个整数m");
scanf("%d",&m);
while (p!=NULL)
p=p->next;
if(p->data>=m)//找插入位置
s = (LinkList) malloc( sizeof (LNode));
s->data = m; //生成新结点
s->next = p->next;
p->next = s;
//插入
//把m插入到表中合适位置
void Del_list(LinkList L,int x,int y)
LinkList p,q;
p=L;
printf("将删除表中大于x小于y的所有元素,请输入合适的x和y");
scanf("%d %d",&x,&y);
while(p!=NULL)
q=p->next;
if(q->data>x||q->data<y)
p->next=p->next->next;
free(q);
q=p->next;
else
p=p->next;
//删除表中大于x小于y的所有元素
void CreateList_L(LinkList L, int n)
LinkList p=L;
int i;
L=(LinkList)malloc(sizeof(LNode));
L->next = NULL; //生成头结点
for (i=n;i>0;--i)
p=(LinkList)malloc(sizeof(LNode));
printf("请按从大到小顺序输入%d个数:",n);
scanf("%d",&p->data); //生成新数据结点
p->next = L->next;
L->next=p; //插入新结点
//建立一个含有n个元素的有序递增单链表
void print_L(LinkList L)
LinkList p=L;
while(p!=NULL)
p=p->next;
printf("%d",p->data);
//输出单链表中元素
void main()
LinkList L;
int n,m,x,y;
printf("请输入新建链表的长度");
scanf("%d",&n);
CreateList_L(L,n) ; //创建
print_L(L); //输出
Insert_list (L,m);
print_L(L); //输出
Del_list (L,x,y); //删除
print_L(L); //输出
#include <stdlib.h>
#include <string.h>
typedef struct Node
char data;
struct Node * next;
node;
void Insert(node* );//插入
void Find(node* );//查找
int Count(node*);//链表长度
void Update(node* );//修改
void Delete(node* );//删除
void Show(node* );//输出
int main()
int a;
node head;
head.next = NULL;
printf("***********链表的操作************\\n\\n");
while(1)
a = 0;
printf("***********请选择您的操作***********\\n\\n");
printf("1 链表的插入\\t 2 链表的查找\\t 3 链表的修改\\n4 链表的删除\\t 5 链表的输出\\t 6 退出系统\\n");
scanf("%d",&a);
switch(a)
case 1:
Insert(&head);
break;
case 2:
Find(&head);
break;
case 3:
Update(&head);
break;
case 4:
Delete(&head);
break;
case 5:
Show(&head);
break;
case 6:
exit(-1);
break;
default :
printf("输入错误!");
break;
return 0;
int Count(node* head)
node* pH = head;
int count = 0;
while (pH->next != NULL )
pH = pH->next;
count++;
return count;
void Insert(node* head )
int which = 0;
int i = 0;
int j = 1;
char ch;
node * pH = head;
printf("\\n1.首插入 2.未插入 3.插入到位置i\\n");
printf("请选择:");
scanf("%d",&which);
ch = getchar();
if (which == 1)
printf("请输入值:");
scanf("%c",&ch);
node * q = (node *)malloc(sizeof(Node));
q->data = ch;
q->next = pH->next;
pH->next = q;
else if (2 == which)
while (pH->next != NULL)
pH = pH->next;
printf("请输入值:");
scanf("%c",&ch);
node * q = (node *)malloc(sizeof(Node));
q->data = ch;
q->next = pH->next;
pH->next = q;
else if ( 3 == which )
printf("请输入i的值:");
scanf("%d",&i);
ch = getchar();
if ( (i > 0) && (i <= Count(head) + 1) )
printf("i = %d",i);
while (j < i)
pH = pH->next;
j++;
printf("请输入值:");
scanf("%c",&ch);
node * q = (node *)malloc(sizeof(Node));
q->data = ch;
q->next = pH->next;
pH->next = q;
else
printf("i输入错误!\\n");
else
printf("选择错误!\\n");
return;
void Show(node* pH)
printf("链表输出:\\n");
if ( pH->next == NULL)
printf("链表为空!\\n");
return;
else
while ( pH->next != NULL )
pH = pH->next;
printf("%3c",pH->data);
printf("\\n输出结束!\\n");
void Find(node* head)
int which = 0;
int j = 0;
int i = 0;
char ch;
bool is_have = false;
node * q = head->next;
if ( Count(head) == 0 )
printf("链表为空!无法查找.\\n");
return;
printf(" 1.查找内容的位置 2.查找位置的内容\\n");
scanf("%d",&which);
ch = getchar();
if (1 == which)
printf("请输入要查找的内容:");
scanf("%c",&ch);
while ( q != NULL)
j++;
if ( q->data == ch)
printf("%c是第%d个。\\n",ch,j);
is_have = true;
q = q->next;
if ( is_have == false )
printf("所查找的内容在链表中不存在!");
else if ( 2 == which )
j = 0;
printf("请输入要查找的位置:");
scanf("%d",&i);
if ( i > Count(head) || i < 1 )
printf("位置错误!无法查找。\\n");
return;
while ( q != NULL && j < i-1 )
q = q->next;
j++;
printf("内容为:%c",q->data);
else
printf("选择错误!\\n");
return;
void Update(node* head)
node * q = head->next;
int i = 0;
int j = 0;
char ch;
if ( Count(head) == 0 )
printf("链表为空!无法查找.\\n");
return;
printf("请输入要修改的位置:");
scanf("%d",&i);
ch = getchar();
if ( i > Count(head) || i < 1 )
printf("位置错误!无法修改。\\n");
return;
printf("请输入修该的值:");
scanf("%c",&ch);
while ( q != NULL && j < i-1 )
q = q->next;
j++;
q->data = ch;
printf("修改成功!\\n");
return;
void Delete(node* head)
node * q = head->next;
node * p = head;
int i = 0;
int j = 0;
char ch;
if ( Count(head) == 0 )
printf("链表为空!无法删除.\\n");
return;
printf(" 1.全部删除 2.删除单个\\n");
scanf("%d",&i);
ch = getchar();
if ( 1 == i)
while( q != NULL )
p = p->next;
q = q->next;
free(p);
head->next = NULL;
printf("释放成功!\\n");
else if ( 2 == i )
printf("请输入要删除的位置:");
scanf("%d",&i);
ch = getchar();
if ( i > Count(head) || i < 1 )
printf("位置错误!无法删除。\\n");
return;
while ( q != NULL && j < i-1 )
p = p->next;
q = q->next;
j++;
p->next = q->next;
free(q);
printf("删除成功!\\n");
else
printf("选择错误!\\n");
参考技术A #include<stdio.h>
#include<stdlib.h>
#include <malloc.h>
typedef struct LNode
int data;
struct LNode *next;
LNode, *LinkList; //结构体类型定义
void Insert_list(LinkList L,int m)
LinkList p=L,s;
int j=0;
printf("请输入插入的一个整数m");
scanf("%d",&m);
while (L!=NULL)
p = p->next;
if(p->data<=m)//找插入位置
s = (LinkList) malloc( sizeof (LNode));
s->data = m;
//生成新结点
s->next = p->next;
p->next = s;
break;
//插入
//把m插入到表中合适位置
void Del_list(LinkList L,int x,int y)
LinkList p,q;
p = L;
// printf("将删除表中大于x小于y的所有元素,请输入合适的x和y");
scanf("%d %d",&x,&y);
while(p!=NULL)
if((p->data > x)&&(p->data < y))
q->next = q->next->next;
p = q->next;
else
q=p;
p = p->next;
//删除表中大于x小于y的所有元素
LinkList CreateList_L(int n)
LinkList p,L;
int i;
L=(LinkList)malloc(sizeof(LNode));
L->next = NULL;
p = L;
//生成头结点
for (i=n;i>0;--i)
p=(LinkList)malloc(sizeof(LNode));
// printf("请按从大到小顺序输入%d个数:",n);
// scanf("%d",&p->data); //生成新数据结点
p->data = i;
p->next = L->next;
L->next=p;
//插入新结点
return L->next;
//建立一个含有n个元素的有序递增单链表
void print_L(LinkList L)
//LinkList p=L;
while(L!=NULL)
printf("%d",L->data);
L=L->next;
//输出单链表中元素
void main()
LinkList L;
int n,m,x,y;
printf("请输入新建链表的长度");
scanf("%d",&n);
L = CreateList_L(n) ;
//创建
print_L(L);
//输出
Insert_list(L,m);
print_L(L);
//输出
Del_list (L,x,y);
//删除
print_L(L);
//输出
稍微改了一点你的代码,编译运行OK了的。。
本回答被提问者采纳求教jquery大神,关于手机端的导航手指左右滑动
手机端的导航过长,需要左右滑动,貌似还有加速减速的效果,求js,jquery大神,说说详细的原理,附带个demo
最好是兼容方面没问题的哦,大神,膜拜了
有关触摸事件参考这里: http://zm10.sm.cn/?src=http%3A%2F%2Fwww.2cto.com%2Fkf%2F201401%2F272575.html&uid=374119f2442b2126e94b23ef1419d180&hid=6b989aa1182219e3e0883131a232b00a&pos=2&cid=9&pi=&di=&time=1412014181458&from=click&restype=1&pagetype=0000000000000402 参考技术A 一个简单的解决方案:顶端固定一个DIV作为导航容器,该DIV左端和右端分别用DIV模拟向左和向右的按钮,中间区域呈现导航按钮,计算当前位置,用模拟的按钮控制左右滚动。
另,你说的手机端用手指滑动,在 HTML 中是由浏览器根据手势触控事件来支持的,jQuery 超越不了浏览器对 JS 的支持,因为 jQuery 就是 JS 的程序包。如果使用 Mouse 事件来实现,也不是不可以,因为手势触控的本质无非还是 Mouse 事件同源的衍生计算。费老鼻子劲使用 Mouse 事假实现一个有加速减速效果的导航滑动,不经济。供参考。 参考技术B
附件里。慢慢研究下代码吧
大神,你确定你写的没问题吗?怎么不管用呢
追答这个是手机端测试的哦~我测试了没问题的。因为绑定的是手机端的触摸事件,PC端浏览器没这个事件的。你可以用谷歌浏览器按F12调出开发者模式
这样就可以模拟手机上的触摸事件了。
还是不行,放手机上也不行,你确定没少给我东西?
以上是关于有关单链表问题,学的太渣,求教大神的主要内容,如果未能解决你的问题,请参考以下文章