数据结构 建表
建表(初始化表)函数: ListInit()typedef int Listltem;
构建一 张元素顺序存储表,完成一 下操作:|
插入:1 2 3 4 5-->1 2 6 3 4 5
删除:1 2 3 4 5-->1 2 3 5
求大佬救救孩子吧 问题都没看懂。表示没法帮!!!
本帖最后由 major_lyu 于 2020-3-8 23:01 编辑
给你写了建表和删除的
#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int val;
struct node *next;
} ListItem;
ListItem *ListInit();
void printList(ListItem *head);
void deleteItem(ListItem *head, int key);
int main()
{
ListItem *list = NULL;
list = ListInit();
printList(list);
int n;
printf("input the key to be deleted\n");
scanf("%d", &n);
deleteItem(list, n);
printList(list);
return 0;
}
ListItem *ListInit()
{
int num;
printf("please input the numbers of iterms\n");
scanf("%d", &num);
if (num <= 0)
return NULL;
printf("input items to be added:\n");
ListItem *head = malloc(sizeof(ListItem));
ListItem *ptr = head;
for (int i = 0; i < num - 1; i++)
{
scanf("%d", &(ptr->val));
ptr->next = malloc(sizeof(ListItem));
ptr = ptr->next;
}
scanf("%d", &(ptr->val));
ptr->next = NULL;
return head;
}
void printList(ListItem *head)
{
ListItem *ptr = head;
while (ptr != NULL)
{
printf("%d->", ptr->val);
ptr = ptr->next;
}
printf("NULL\n");
}
void deleteItem(ListItem *head, int key)
{
ListItem *ptr = head;
while (ptr->next != NULL)
{
if (ptr->next->val == key)
{
ListItem *temp = ptr->next;
ptr->next = ptr->next->next;
free(temp);
}
else
{
ptr = ptr->next;
}
}
}
major_lyu 发表于 2020-3-8 22:57
给你写了建表和删除的
太感谢了,我去研究研究 major_lyu 发表于 2020-3-8 22:07
问题都没看懂。表示没法帮!!!
害,我也不懂这种东西 我也是初学者,写的可能好理解一点,学过去一段时间了,感觉生疏了,正好复习一下嘿嘿,就是创建,插入,测量,删除的几个操作。
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(LinkList)
typedef struct Node
{
int data;
struct Node* next;
}LinkList;
LinkList *InitList()
{
LinkList* L;
L = (LinkList *)malloc(LEN);
if (L == NULL)
{
exit(0);
}
L->next == NULL;
return L;
}
LinkList *CreatList()//尾插法创建单链表
{
LinkList* L;
LinkList* p;
LinkList* tail; //定义一个尾指针
int num;
L = InitList();//头结点
tail = L;
printf("创建一个单链表,请输入数据以0结束: ");
scanf("%d", &num);
while (num != 0)
{
p = (LinkList*)malloc(LEN);
p->data = num;
tail->next = p;
tail = p;
scanf("%d",&num);
}
tail->next = NULL;
return L;
}
void PrintList(LinkList* L)
{
LinkList* p;
p = L->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
}
LinkList* DeleteList(LinkList* L, int N)
{
LinkList* p;
LinkList* q;
p = L->next;
while (p != NULL)
{
if (L->next->data == N)//如果第一个结点就是要删除的元素
{
L->next = L->next->next;
break;
}
else if(p->next->data == N)
{
p->next = p->next->next;
break;
}
p = p->next;
}
return L;
}
int ListLength(LinkList* L)
{
int count = 0;
LinkList* p;
p = L->next;
while (p != NULL)
{
count++;
p = p->next;
}
return count;
}
LinkList* InsertList(LinkList* L, int M, int local)
{
int i=0;
LinkList *p;
LinkList* q;//用来接收要插入的数据
q = (LinkList *)malloc(LEN);
p = L->next;
q->data = M;
while (p != NULL)
{
if (local == 1)//如果插在第一个结点
{
q->next = L->next;
L->next = q;
break;
}
else if((i+2) == local)
{
q->next = p->next;
p->next = q;
break;
}
i++;
p = p->next;
}
return L;
}
int main(void)
{
LinkList* L;
int N;
int local, M;
int len;
L = CreatList();
printf("当前链表中的元素是:\n");
PrintList(L);
printf("\n当前链表的长度是:");
len = ListLength(L);
printf("%d", len);
printf("\n请输入你想插入的元素是及它的位置: ");
scanf("%d %d", &M, &local);
InsertList(L, M, local);
printf("插入后链表中的元素是:\n");
PrintList(L);
printf("\n请输入你想要删除的元素:");
scanf("%d", &N);
DeleteList(L,N);
printf("删除后链表中的元素是:\n");
PrintList(L);
return 0;
} 本帖最后由 Cool_Breeze 于 2020-3-10 21:12 编辑
你看看!
首先要确定你要操作的节点位置,然后找到你要操作位置的上一个节点!
页:
[1]