单链表的基本操作

qq_37373452 2017-10-29 10:57:58
运行出现问题了,






下面是代码,我是大二学生,老师是给了代码的,但是我平时跟老师编程习惯不同,这个问题解决不了!求帮忙
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<malloc.h>
typedef struct node{
int data;
struct node *next;
}SLink;
int Init_slink(SLink *L){
L=(SLink*)malloc(sizeof(SLink));
L->next=NULL;
return 1;
}
int Insert_slink(SLink *L,int i,int x){
int j=0;
SLink *p=L;
SLink *s;
if(i<0)
return 0;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL)
return 0;
else{
s=(SLink*)malloc(sizeof(SLink));
s->data=x;
s->next=p->next;
p->next=s;
return 1;
}
}
Display_slink(SLink *L){
SLink *p;
p=L->next;
while(p!=NULL){
printf("%5d",p->data);
p=p->next;
}
}
int main(){
int i,a[10];
int e;
SLink L;
Init_slink(&L);
srand((unsigned)time(NULL));
printf("准备的数据为:\n");
for(i=1;i<=10;i++){
a[i-1]=10+rand()%(100-10+1);
printf("%5d",a[i-1]);
}
printf("\n");
printf("向链表中插5个数据为:\n");
for(i=1;i<=5;i++){
//向单链表插入数据
Insert_slink(&L,i,a[i-1]);
}
Display_slink(&L);
return 0;
}
...全文
517 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
destory27 2017-11-09
  • 打赏
  • 举报
回复
#define MAX 100 typedef struct LL{ int array[MAX]; int size; }list1; void Menu(void) { fprintf(stderr, "%s\n", "----------------------------------------"); fprintf(stderr, "%s\n", "\t\t有序顺序表L1"); fprintf(stderr, "%s\n", "----------------------------------------"); fprintf(stderr, "%s\n", "\t+----------------------+\t"); fprintf(stderr, "%s\n", "\t|1.初始化\t2.添加|\t\t"); fprintf(stderr, "%s\n", "\t|3.元素个数\t4.插入|\t\t"); fprintf(stderr, "%s\n", "\t|5.显示\t\t6.排序|\t\t"); fprintf(stderr, "%s\n", "\t|7.查找\t\t8.删除|\t\t"); fprintf(stderr, "%s\n", "\t|9.取出\t\t0.退出 \t\t"); fprintf(stderr, "%s\n", "\t+----------------------+\t"); fprintf(stderr, "%s\n", "----------------------------------------"); return; } void init(list1 *list) { list->size = 0; list->array[MAX] = 0; printf("初始化成功。\012"); Sleep(3000); return; } void add(list1 *list) { int n; printf("你要添加的元素个数:"); while((scanf("%d", &n)) == 0){ fflush(stdin); printf("Enter again:"); } while(n--){ printf("input data:"); while((scanf("%d", &list->array[list->size++])) == 0){ fflush(stdin); printf("Enter again:"); } } printf("添加完成。\012"); Sleep(3000); return; } void listsize(list1 list) { fprintf(stderr, "%s%d%s\n", "顺序表中有", list.size, "个元素"); Sleep(3000); return ; } void insert(list1 *list) { int n; fprintf(stderr, "%s", "输入要插入数的个数:"); fflush(stdin); while((scanf("%d", &n)) == 0){ fflush(stdin); fprintf(stderr, "%s", "重新输入要插入数的个数:"); } while(n--){ fprintf(stderr, "%s", "输入要插入的数:"); while((scanf("%d", &list->array[list->size++])) == 0){ fflush(stdin); fprintf(stderr, "%s", "重新输入要插入的数:"); } } fprintf(stderr, "%s", "插入完成.\012"); Sleep(3000); return ; } void show(list1 list) { int i = 0; fprintf(stderr, "%s", "list1: "); while(i < list.size) fprintf(stderr, "%d ", list.array[i++]); fprintf(stderr, "%c", '\012'); fprintf(stderr, "%s", "<list1 已显示完.>"); fprintf(stderr, "%c", '\012'); Sleep(3000); return ; } void insert_sort(list1 *list) { if(list->size == 0){ printf("数据内容为空.\012"); Sleep(3000); return; } int i; int j; for(i = 0; i < list->size-1; ++i){ j = i; int temp = list->array[i+1]; while(j > -1 && temp < list->array[j]){ list->array[j+1] = list->array[j]; --j; } list->array[j+1] = temp; } fprintf(stderr, "%s\n", "排序完成."); Sleep(3000); return ; } void seek(list1 list) { if(list.size == 0){ printf("数据内容为空.\012"); Sleep(3000); } else{ int n; printf("输入你要查找的数:"); while((scanf("%d", &n)) == 0){ fflush(stdin); printf("Enter again:"); } int i = 0; int count = 0; while(i < list.size){ if(list.array[i] == n){ fprintf(stderr, "%s%d%s%d.", "第 [ ", i+1, " ]个元素是", n); ++i; ++count; } else ++i; } if(count == 0) printf("没有此数据.\n"); Sleep(3000); } return ; } void del(list1 *list) { if(list->size == 0){ fprintf(stderr, "%s", "数据内容为空.\012"); Sleep(3000); } else{ int n; fprintf(stderr, "%s", "输入你要删除的数:"); while((scanf("%d", &n)) == 0){ fflush(stdin); printf("Enter again:"); } int i = 0; int flag = 0; int temp[10]; int len = 0; while(i < list->size){ if(list->array[i] == n){ flag = 1; temp[len++] = ++i; } else ++i; } if(flag == 0){ fprintf(stderr, "%s", "未找到要删除的数据.\012"); Sleep(3000); } else{ for(i = 0; i < len; fprintf(stderr, "%s%d%s%d.\n", "第 [ ", temp[i++], " ] 位是 ", n )) ; if(len == 1){ for(i = temp[len-1]; i < list->size; ++i){ list->array[i-1] = list->array[i]; } list->size--; fprintf(stderr, "%s", "删除成功."); Sleep(3000); } else{ int bits; fprintf(stderr, "%s", "要删除的哪位数值:"); while((scanf("%d", &bits)) == 0){ fflush(stdin); fprintf(stderr, "%s:", "重新输入该数值"); } flag = 0; for(i = 0; i < len; ++i){ if(bits == temp[i]){ flag = 1; break; } } if(flag == 0){ fprintf(stderr, "%s", "input error!"); Sleep(3000); } else{ for(i = bits; i < list->size; ++i) list->array[i-1] = list->array[i]; list->size--; fprintf(stderr, "%s", "删除成功."); Sleep(3000); } } } } return; } void pop(list1 *list) { if(list->size == 0){ fprintf(stderr, "%s", "数据内容为空.\012"); Sleep(3000); return ; } fprintf(stderr, "%s", "输入要取出第几位元素:"); int bit; while((scanf("%d", &bit)) == 0){ fflush(stdin); fprintf(stderr, "%s", "重新输入要取出第几位元素:"); } if(bit > list->size || bit <= 0 ){ fprintf(stderr, "%s", "该位数值不存在."); Sleep(3000); return ; } fprintf(stderr, "%s%d.", "该位数值为 ", list->array[bit-1]); int i; for(i = bit; i < list->size; ++i) list->array[i-1] =list->array[i]; list->size--; fprintf(stderr, "\n%s", "取出完成."); Sleep(3000); return ; }
自信男孩 2017-10-30
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>   /*srand*/
#include<malloc.h>

typedef struct node{
    int data;
    struct node *next;
}SLink;

int Init_slink(SLink *L)
{
    L = (SLink*)malloc(sizeof(SLink));
    L->next = NULL;
    return 1;
}
int Insert_slink(SLink *L,int i,int x)
{
    int j=0;
    SLink *p=L;
    SLink *s;
    if(i<0)
        return 0;
    while(p!=NULL&&j<i-1){
        p=p->next;
        j++;
    }
    if(p==NULL)
        return 0;
    else{
        s = (SLink*)malloc(sizeof(SLink));
        s->data = x;
        s->next = p->next;
        p->next = s;
    }
    return 1;
}
void Display_slink(SLink *L)   /*return void */
{
    SLink *p;
    p = L->next;
    while(p!=NULL){
        printf("%5d",p->data);
        p=p->next;
    }
    putchar(10); /* '\n' */
}
int main()
{
    int i,a[10];
    //int e;
    SLink L;
    Init_slink(&L);
    srand((unsigned)time(NULL));
    printf("准备的数据为:\n");
    for(i=1;i<=10;i++){
        a[i-1]=10+rand()%(100-10+1);
        printf("%5d",a[i-1]);
    }
    printf("\n");
    printf("向链表中插5个数据为:\n");
    for(i=1;i<=5;i++){
        //向单链表插入数据
        Insert_slink(&L,i,a[i-1]);
    }
    Display_slink(&L);
    return 0;
}
代码没有多大的逻辑问题,有些警告我已经去掉;建议对比代码看一下
赵4老师 2017-10-30
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧