当前位置:
文档之家› 线性表、链表、栈、队列(C语言版)
线性表、链表、栈、队列(C语言版)
}//ListDelete_L
void PrintElem_L(LinkList L) { LinkList p; for(p=L->next;p!=NULL;p=p->next) {
printf("%d ",p->date); }
printf("\n\n\n"); }
void main() { LinkList L;
*q = e; ++L.length;
for(v=0;v<L.length;v++) {
printf("%d ",L.elem[v]); }
return OK; } // ListInsert_Sq
int Getlen(sqList L) { return L.length;}
int Locate(sqList L,ElemType e) { int i;
p=p->next; ++j;
} if(!p||j>i-1) return ERROR; s=(LinkList)malloc(sizeof(LNode)); s->date=e; s->next=p->next; p->next=s; return OK;
}//L
Status ListDelete_L(LinkList L,int i,ElemType &e) {
Status Create_List(sqList &L) {
ElemType e; printf("当输入 0 时结束!\n");
printf("\n 请输入要插入的元素(以元素 0 结束输入):\n"); scanf("%d",&e); while(e!=0) {
ListInsert_Sq(L,L.length+1,e); scanf("%d",&e); } return OK; }
p->next=L->next; L->next=p; if(num==0) {break;} }
return OK;
}
Status ListInsert_L(LinkList L,int i,ElemType e) {
LinkList p; LinkList s; p=L; int j=0; while(p&&j<i-1) {
int i=Locate(L,3); printf("元素(3)的位置:%d\n",i);
int len=Getlen(L); printf("线性表长度为:%d\n",len);
priorelem(L,2,a); printf("元素(2)的前驱:%d\n",a);
nextelem(L,2,a); printf("元素(2)的后继:%d\n",a);
switch(select)
{
case 1:
T1=GreatList_L(L);
if(T1==OK) {printf("创建成功!\n\n");} else {printf("创建失败!\n\n");}
PrintElem_L(L);
break; case 2:
printf("请输入插入的位置和插入的元素值(中间用一个空格隔开):"); scanf("%d %d",&pos,&e); T2=ListInsert_L(L,pos,e); if(T2==OK) {printf("插入成功!\n\n");} else {printf("插入失败!你输入的位置超出链表长度!\n\n");}
}
2、 链表: #include <stdio.h> #include <stdlib.h>
#define TRUE 1 #define OK 1 #define FALSE -1 #define ERROR 0
typedef int Status; typedef int ElemType;
typedef struct LNode { ElemType date;
Status InitList_Sq(sqList &L) { L.elem =(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = LIST_INIT_SIZE; printf("\n 线性表创建成功!\n"); return OK; } // InitList_Sq
i=0; while(i<L.length && L.elem[i]!=e) {i++;} if(i<L.length) return i+1 ; else return 0; }
Status nextelem(sqList L, int cure, int &nexte) { int i=1; while(i<L.length && L.elem[i-1]!=cure)
int Status ; int ElemType ;
#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10
typedef }sqList;
struct{ ElemType *elem; int length; int listsize;
Status ListInsert_Sq(sqList &L, int i, ElemType e); Status ListTraverse_Sq(sqList &L);
Status ListInsert_Sq(sqList &L, int i, ElemType e) {
ElemType *p; int v; printf("将在线性表位置 1 插入元素 5\n"); if (i < 1 || i > L.length+1) return ERROR; if (L.length >= L.listsize) {
Status Push(SqStack &S) {
int i=6; SElemType e;
ElemType *newbase = (ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof (ElemType));
if (!newbase) return ERROR; L.elem = newbase; L.listsize += LISTINCREMENT; } ElemType *q = &(L.elem[i-1]); for (p = &(L.elem[L.length-1]); p>=q; --p) *(p+1) = *p;
LinkList p; int i=6; int num=0;
L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; printf("请输入数值(中间有 1 个空格,当输入 0 时结束):"); for(i=6;i>0;--i) {
p=(LinkList)malloc(sizeof(LNode)); scanf("%d ",&num); p->date=num;
i++; if(i>L.length)
return FALSE; else {
pree=L.elem[i-2]; return TRUE; } }
Status ListDelete_Sq(sqList L, int i, ElemType &e) {
ElemType *p, *q; if (i<1 || i>L.length) return ERROR; p = &(L.elem[i-1]); e = *p; q = L.elem+L.length-1; for (++p; p<=q; ++p) *(p-1) = *p; --L.length; return OK; } // ListDelete_Sq
typedef int Status; typedef int SElemType;
typedef struct{
SElemType *base; SElemType *top; int stacksize;
}SqStack;
Status InitStack(SqStack &S); Status Push(SqStack &S); Status Pop(SqStack &S);
PrintElem_L(L);
break;
case 4: exit(TRUE);
break; }
}
} 3、 栈:
#include<stdio.h> #include<stdlib.h>
#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10
#define OK 1 #define ERROR 0
struct LNode *next;
}LNode,*LinkList;
Status GreatList_L(LinkList &L); Status ListInsert_L(LinkList L,int i,ElemType e);