List MakeEmpty() { List L = (List)malloc(sizeof(List)); L->Next=NULL; return L; } Position Find( List L, ElementType X ) { L=L->Next; while(L) { if(L->Data==X) { return L; } L=L->Next; } return ERROR; } bool Insert( List L, ElementType X, Position P ) { List p = (List)malloc(sizeof(List)); p->Data=X; p->Next=NULL; List k=L; while(k) { if(k->Next==P) { p->Next=P; k->Next=p; return true; } k=k->Next; } printf("Wrong Position for Insertion\n"); return false; } bool Delete( List L, Position P ) { if(L==P){ L=L->Next; return true; } while(L) { if(L->Next==P) { L->Next=P->Next; return true; } L=L->Next; } printf("Wrong Position for Deletion\n"); return false; }
时间: 2024-01-16 14:05:47 浏览: 133
这是一个基本的链表操作的 C 语言实现。其中包含了四个函数:MakeEmpty、Find、Insert 和 Delete。
MakeEmpty 函数用于创建一个空的链表,它返回一个指向链表头结点的指针。
Find 函数用于在链表中查找是否存在某个元素 X,如果找到则返回该元素所在结点的指针,否则返回 ERROR(这里 ERROR 可以是一个宏定义或者一个常量)。
Insert 函数用于在链表的某个位置 P(指向链表中某个结点的指针)处插入一个元素 X。如果找到了位置 P,则将新结点插入到 P 的后面。如果没有找到位置 P,则插入失败。
Delete 函数用于删除链表中某个位置 P 处的结点。如果 P 是链表的头结点,则不能删除,返回删除失败。否则,在链表中查找是否存在位置 P,并将 P 的前一个结点与 P 的后一个结点连接起来,然后释放 P 所在的内存空间。
以上是对这些函数的简单介绍,你可以根据需要进行更详细的了解和学习。
相关问题
#define _CRT_SECURE_NO_WARNINGS //顺序存储的栈 实现文件 ///////////////////////////////////////////////////// #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct SeqStack { int* data; // 数据元素指针 int top; // 栈顶元素编号 int max; // 最大节点数 }SeqStack; /*创建一个栈*/ SeqStack* SS_Create(int maxlen) { SeqStack* ss = (SeqStack*)malloc(sizeof(SeqStack)); ss->data = (int*)malloc(maxlen * sizeof(int)); ss->top = -1; ss->max = maxlen; return ss; } /*释放一个栈*/ void SS_Free(SeqStack* ss) { free(ss->data); free(ss); } /*清空一个栈*/ void SS_MakeEmpty(SeqStack* ss) { ss->top = -1; } /*判断栈是否为满*/ int SS_IsFull(SeqStack* ss) { /*请在BEGIN和END之间实现你的代码*/ /*****BEGIN*****/ if (ss->top == ss->max - 1) return 1; return 0; /******END******/ } /*判断栈是否为空*/ int SS_IsEmpty(SeqStack* ss) { /*请在BEGIN和END之间实现你的代码*/ /*****BEGIN*****/ if (ss->top == -1) return 1; return 0; /******END******/ } /*将x进栈,满栈则无法进栈(返回0,否则返回1)*/ int SS_Push(SeqStack* ss, int x) { //务必看清楚使用的是C语言还是C++喔 /*请在BEGIN和END之间实现你的代码*/ /*****BEGIN*****/ /******END******/ } /*出栈,出栈的元素放入item,空栈则返回0,否则返回1*/ int SS_Pop(SeqStack* ss, int* item) { /*请在BEGIN和END之间实现你的代码*/ /*****BEGIN*****/ /******END******/ } /*从栈底到栈顶打印出所有元素*/ void SS_Print(SeqStack* ss) { if (SS_IsEmpty(ss)) { printf("stack data: Empty!\n"); return; } printf("stack data (from bottom to top):"); int curr = 0; while (curr <= ss->top) { printf(" %d", ss->data[curr]); curr++; } //printf("\n"); } int main() { int max; scanf("%d", &max); SeqStack* ss = SS_Create(max); char dowhat[100]; while (1) { scanf("%s", dowhat); if (!strcmp(dowhat, "push")) { int x; scanf("%d", &x); SS_Push(ss, x); } else if (!strcmp(dowhat, "pop")) { int item; SS_Pop(ss, &item); } else { break; } } SS_Print(ss); SS_Free(ss); }
这是一个顺序存储的栈的实现文件,其中包含了常用的栈操作函数。下面是缺失的两个函数的实现:
1. SS_Push:将元素x进栈,满栈则无法进栈(返回0,否则返回1)
```c
int SS_Push(SeqStack* ss, int x) {
if (SS_IsFull(ss)) {
return 0; // 栈已满,无法进栈
}
ss->top++;
ss->data[ss->top] = x;
return 1;
}
```
2. SS_Pop:出栈,出栈的元素放入item,空栈则返回0,否则返回1
```c
int SS_Pop(SeqStack* ss, int* item) {
if (SS_IsEmpty(ss)) {
return 0; // 栈为空,无法出栈
}
*item = ss->data[ss->top];
ss->top--;
return 1;
}
```
此外,程序中还包含了主函数,可以读入用户输入的命令并进行相应的操作。最后,调用 SS_Print 函数将栈中的元素从底部到顶部打印出来。
list makeempty(); position find( list l, elementtype x ); bool insert( list l, elementtype x, position p ); bool delete( list l, position p );
list makeempty(); // 创建一个空的链表
position find( list l, elementtype x ); // 在链表中查找元素x,并返回其位置
bool insert( list l, elementtype x, position p ); // 在链表中位置p处插入元素x,成功返回true,失败返回false
bool delete( list l, position p ); // 在链表中删除位置p处的元素,成功返回true,失败返回false
阅读全文