void delet(LinkList *list, int n) { LinkList *t = list, *in; int i = 0; while (i < n && t != NULL) { in = t; t = t->next; i++; } if (t != NULL) { in->next = t->next; free(t); } else { puts("节点不存在"); } }
时间: 2024-04-15 13:24:57 浏览: 21
这是一个删除链表节点的函数`delet`,它接受两个参数:一个是指向链表头节点的指针`list`,另一个是要删除的节点的位置`n`。
首先,定义了两个指针变量`t`和`in`,并将`t`指向链表头节点`list`,同时初始化一个计数器`i`为0。
然后,通过一个循环遍历链表,直到找到第`n`个节点或者遍历到链表尾部。在每次循环中,将指针`in`指向当前节点`t`,将指针`t`指向下一个节点,并将计数器`i`自增1。
接着,判断指针`t`是否为NULL。如果不为NULL,表示找到了第`n`个节点,那么将指针`in`的`next`指针指向节点`t`的下一个节点,即跳过节点`t`,将其从链表中删除。
然后,通过`free`函数释放被删除节点`t`的内存空间。
如果指针`t`为NULL,表示找不到第`n`个节点,输出提示信息"节点不存在"。
这样,函数就完成了对链表中指定位置节点的删除操作。
相关问题
#include<stdio.h> #include<iostream> #include<malloc.h> using namespace std; class list { public: list(int max); int insert(); int insert(int weizhi,int a ); void find(int yuansu); void delet(int weizhi); void readfile(list b); private: int size; int*data; int maxs; }; list::list(int max) { size=0; maxs=max; data=new int[maxs]; if (data==NULL) throw 1; } int list::insert() { int a; cout<<"输入插入首元:"<<endl; cin>>a; if(size==0) { data[0]=a; } else { for(int b=0;b<size;b++) { data[b]=data[b+1]; } data[0]=a; } size++; } int list::insert(int weizhi,int a) { if (weizhi > size) { cout << "输入错误,无该位置的数据\n"; } else { for (int i = size - 1; i >= weizhi - 1; i--) { data[i + 1] = data[i]; } data[weizhi - 1] = a ; } size++; } void list::find(int yuansu) { int j=0; for (int i = 0; i < size; i++) { if (data[i] == yuansu) { cout << "第" << i + 1 << "位为" << yuansu << "\n"; j++; } } if (j == 0) cout << "该表没有该数据"<<endl; } void list::delet(int weizhi) { for (int i = weizhi - 1; i < size; i++) { data[i] = data[i + 1]; } size--; cout << "删除成功\n"; } void list::readfile(list a) { FILE *fp = NULL; fp = fopen("E://线性表.txt", "wb+"); for (int i=0; i <a.size; i++) { fprintf(fp,"%d\t",a.data[i]); } fclose(fp); cout << "写入成功!" << endl; } int main() { list a(30); for(int x=0;x<=5;x++) { a.insert(); } a.insert(3,34); a.find(34); a.delet(2); a.readfile(a); }
这是一个使用 C++ 实现的线性表,包括插入、查找、删除和读写文件等操作。其中构造函数 list(int max) 用于创建一个大小为 max 的线性表;insert() 用于在表首插入元素;insert(int weizhi,int a ) 用于在指定位置插入元素;find(int yuansu) 用于查找指定元素在表中的位置;delet(int weizhi) 用于删除指定位置的元素;readfile(list b) 用于将线性表写入到文件中。
在 main 函数中,首先创建了一个大小为 30 的线性表 a,然后对其进行了插入、查找、删除和读写文件等操作。
帮我修改这串代码使其能在Visual Studio 2022上运行使用#include <stdio.h> #include <string.h> #define size 20 int BF(char S[], char T[]); char* delet(char S[], char T[], int n); int main() { int i; int j; char a[]; char S[] = "10 20 30"; char T[] = "40"; printf("新换进去的数字是"); scanf("%s", &a[]); int start = BF(S, T); if (start != 0) {printf("子串在主串中的起始位置是:%d\n", start); printf("替换子串后的结果是:%s\n", insert(S, T, start)); } else {printf("子串不在主串中\n"); } return 0;} int BF(char S[], char T[]) { int start = 0; int i = 0, j = 0; while ((S[i] != '\0') && (T[j] != '\0')) { if (S[i] == T[j]) { i++; j++; } else { start++; i = start; j = 0; } } if (T[j] == '\0') { return start; } else { return 0; }} char* delet(char S[], char T[], int n) { int lena, lenb, i, j; lena = strlen(S);//主串长度 lenb = strlen(T);//子串长度 for (i = n; i < lena - lenb; i++) { S[i] = S[i + lenb]; } S[i + lenb] = '\0'; return S;} char* insert(char S[], char T[], int n,char a[]) { int lena, lenb, i, j; int x = 0; lena = strlen(S);//主串长度 lenb = strlen(a);//新串长度 for (i = n;i < lena - lenb;i++;x++) { S[i + lenb]=S[i]; S[i] = a[0]; } return S; }
以下是修改后的代码,主要修改了函数参数和一些语法错误:
```c++
#include <stdio.h>
#include <string.h>
#define SIZE 20
int BF(char S[], char T[]);
char* delet(char S[], char T[], int n);
char* insert(char S[], char T[], int n, char a[]);
int main() {
int i;
int j;
char a[SIZE];
char S[] = "10 20 30";
char T[] = "40";
printf("新换进去的数字是");
scanf("%s", a);
int start = BF(S, T);
if (start != 0) {
printf("子串在主串中的起始位置是:%d\n", start);
printf("替换子串后的结果是:%s\n", insert(S, T, start, a));
}
else {
printf("子串不在主串中\n");
}
return 0;
}
int BF(char S[], char T[]) {
int start = 0;
int i = 0, j = 0;
while ((S[i] != '\0') && (T[j] != '\0')) {
if (S[i] == T[j]) {
i++;
j++;
}
else {
start++;
i = start;
j = 0;
}
}
if (T[j] == '\0') {
return start;
}
else {
return 0;
}
}
char* delet(char S[], char T[], int n) {
int lena, lenb, i, j;
lena = strlen(S);//主串长度
lenb = strlen(T);//子串长度
for (i = n; i < lena - lenb; i++) {
S[i] = S[i + lenb];
}
S[i + lenb] = '\0';
return S;
}
char* insert(char S[], char T[], int n, char a[]) {
int lena, lenb, i, j;
int x = 0;
lena = strlen(S);//主串长度
lenb = strlen(a);//新串长度
for (i = n; i < lena - lenb; i++, x++) {
S[i + lenb] = S[i];
S[i] = a[x];
}
return S;
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)