有关单链表问题,学的太渣,求教大神

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 <stdio.h>
#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
最好是兼容方面没问题的哦,大神,膜拜了

写代码有些麻烦,给个关键建议。你大概是在拖动页面上遇到麻烦吧!要实现在触控设备上手指拖动元素,不能用mousemove哟,这个是没用的,要用到touchstart(手指接触触摸屏),touchmove(手指在触摸屏上移动),touchend(手指离开触摸屏)。touchmove调用的函数里最好填上event.preventDefault() 否则有些浏览器对touchmove也不管用哟!这个还可以开发多点触控,你自己去研究吧!

有关触摸事件参考这里: 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调出开发者模式

这样就可以模拟手机上的触摸事件了。

追问

还是不行,放手机上也不行,你确定没少给我东西?

以上是关于有关单链表问题,学的太渣,求教大神的主要内容,如果未能解决你的问题,请参考以下文章

JAVA模拟顺序表新增,模拟单链表新增

单链表实现贪吃蛇

单链表实现多项式的表示及运算

求集合的并,交,差集合(有序单链表的实践)

数据结构初阶第三篇——单链表(实现+动图演示)[建议收藏]

单链表的初始化,整表创建,单个元素插入,单个元素删除,整表删除等操作