Status ListInsert_Sq(SqList &L,int i,int e){//i是在线性表中的位置编号,i从1开始
if(i<1||i>L.length+1)return ERROR;
if(L.length>=L.listsize){
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCSEMENT)*sizeoff(ElemType)); //追加分配存储空间
if(!newbase) exit(OVERFLOW);
L.elem = newbase; //新基址
L.listsize += LISTINCREMENT;// 更新表的存储空间长度
}
q = &(L.elem[i-1]); //q为插入位置指针,数组中下标从0开始
for(p = &(L.elem[L.length - 1]); p >=q; --p) //下标形式实现for(j = L.length-1, j >= i , j--)
*(p+1) = *p //移动数据元素 L[j + 1] = L[j]
*q = e; //插入元素
++ L.length;
return OK
这是链表
#define overflow -1
#define ok 1
#define error 0
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int status;
typedef int elemtype;
typedef struct lnode
{
elemtype data;
struct lnode *next;
} lnode, *linklist;
status creatlink(linklist &L, int n, elemtype *e) //从表头插入
{
int i;
linklist p;
L = (linklist)malloc(sizeof(lnode));
if (!L)
return error;
L->next = NULL;
for (i = n - 1; i >= 0; --i)
{
if (!(p = (linklist)malloc(sizeof(lnode))))
return error;
p->data = e[i];
p->next = L->next;
L->next = p;
}
return ok;
}
void printlink(linklist L)
{
linklist p = L->next;
while (p)
{
printf("%d->", p->data);
p = p->next;
}
printf("end\n");
}
status insertlink(linklist &L, int i, elemtype e)
{
linklist s, p = L;
int k = 0;
while (p->next != NULL && k < i - 1)
{
p = p->next;
++k;
}
if (!p->next || k > i - 1)
return error;
if (!(s = (linklist)malloc(sizeof(lnode))))
return overflow;
s->data = e;
s->next = p->next;
p->next = s;
return ok;
}
status dellink(linklist L, int i, elemtype &e)
{
int k;
linklist q, p = L;
while (p->next != NULL && k < i - 1)
{
p = p->next;
k++;
}
if (!p->next || k > i - 1)
return error;
q = p->next;
p->next = q->next;
e = q->data;
free(q);
return ok;
}
void freelink(linklist &L)
{
linklist p, q;
p = L;
while (p != NULL)
{
p = L->next;
q = p->next;
free(q);
}
L = NULL;
}
int main()
{
elemtype e[] = {1, 22, 339, 44, 55, 66, 332, 188, 2333};
int i, n = 9;
linklist head;
elemtype rc;
if (!creatlink(head, n, e)) //创建链表
return error;
printlink(head);
// printf("index value-->");
// scanf("%d%d", &i, &rc);
i = 2, rc = 9999;
if (!insertlink(head, i, rc)) //插入
return error;
printlink(head);
// printf("index value-->");
// scanf("%d%d", &i, &rc);
i = 2, rc = 9999;
if (!dellink(head, i, rc)) //删除
return error;
printlink(head);
freelink(head); //释放链表
if (head)
printf("xiaoxiaoran");
}
这是顺序表
#define overflow -1
#define ok 1
#define error 0
#define maxsize 16
#define increment 10
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int status;
typedef int elemtype;
typedef struct
{
elemtype *elem;
int length;
int listsize;
} sqlist;
status initlist(sqlist &L)
{
L.elem = (elemtype *)malloc(maxsize * sizeof(elemtype));
if (!L.elem)
exit(overflow);
L.length = 0;
L.listsize = maxsize;
return ok;
}
status insertlist(sqlist &L, int i, elemtype e)
{
if (i < 1 || i > L.length)
return error;
elemtype *p;
int j;
if (L.length >= L.listsize)
{
p = (elemtype *)realloc(L.elem, (L.listsize + increment) * sizeof(elemtype));
if (!p)
exit(overflow);
L.elem = p;
L.listsize += increment;
}
for (j = L.length - 1; j >= i - 1; --j)
L.elem[j + 1] = L.elem[j];
L.elem[j + 1] = e;
L.length++;
return ok;
}
void printlist(sqlist L)
{
int i;
for (i = 0; i < L.length; i++)
printf("%d ", L.elem[i]);
printf("\n");
}
status dellist(sqlist &L, int i, elemtype &e)
{
int j;
if (i < 1 || i > L.length)
return error;
e = L.elem[i - 1];
for (j = i; j < L.length; j++)
L.elem[j - 1] = L.elem[j];
--L.length;
return ok;
}
int main()
{
sqlist LL;
elemtype x;
int r, i;
if (!initlist(LL)) //初始化
return error;
for (i = 0; i < 10; i++)
LL.elem[i] = i * 8;
LL.length += 10;
//printf("value index-->"); //插入
//scanf("%d %d", &x, &r);
x = 188, r = 3;
insertlist(LL, r, x);
printlist(LL);
//printf("index-->"); //删除
//scanf("%d", &r);
dellist(LL, r, x);
printlist(LL);
printf("xiaoxiaoran");
}
这段怎么成伪代码了呢?
供参考:
Status ListInsert_Sq(SqList &L,int i,int e)//i是在线性表中的位置编号,i从1开始
{
if(i<1||i>L.length+1) return ERROR;
if(L.length >= L.listsize)
{
ElemType* newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCSEMENT)*sizeof(ElemType));//追加分配存储空间
if(!newbase) exit(OVERFLOW);
L.elem = newbase; //新基址
L.listsize += LISTINCREMENT;// 更新表的存储空间长度
}
ElemType *p,*q;
q = &(L.elem[i-1]); //q为插入位置指针,数组中下标从0开始
for(p = &(L.elem[L.length - 1]); p >=q; --p) //下标形式实现for(j = L.length-1, j >= i , j--)
*(p+1) = *p //移动数据元素 L[j + 1] = L[j]
*q = e; //插入元素
++ L.length;
return OK
}