数据库作业: 输入一组整数,建立带头结点的单链表,并实现线性表的求长度、插入和删除等操作。

希望能来个没有什么错误的~只有20分了~

昨天闲着没事写了个C++的约瑟夫环问题的解决。。
是带头结点的循环单链表。。只要改一两处地方就可以改成普通单链表。。
求长度、插入、删除操作都有。。。

#include <iostream>
#include <vector>
#include <assert.h>
using namespace std;

template <class T>
class LinkedList{
typedef struct LNode{
T value;
LNode *next;
}LNode, *pNode;
private:
pNode headNode;
int size;
public:
LinkedList(){
headNode = new LNode;
headNode->value = NULL;
headNode->next = headNode;
size = 0;
}
~LinkedList(){

}

void add(T &t){
pNode node = new LNode;
node->value = t;
node->next = headNode;

pNode tmp = headNode;
while(tmp->next != headNode){
tmp = tmp->next;
}
tmp->next = node;
size ++;

}
bool remove(T t){
pNode pre, node;
pre = headNode;
node = headNode->next;
while(node!=headNode){

if(node->value == t){
pre->next = node->next;
size --;

//T rt = node->value;
delete node;
return true;
}
pre = node;
node = node->next;

}

return false;
}

T get(int index){
//assert( index < size);
if(index >= size){
throw 1;
}

pNode node = headNode->next;
int i=0;
for(;i<index;i++){
node = node->next;
}
return node->value;
}

int getSize(){
return size;
}

void printList(){
cout <<"list size: " << size << ", elements: " << endl;
for(pNode p = headNode->next; p!=headNode; p=p->next){
cout << p->value << " ";
}
cout << endl;
}
void resefu(){
int n = 9, k = 6, m = 5;

pNode cur = headNode;
for(int i=0; i<k; i++){
cur = cur->next;
}
while(size > 0){
for(int i=1; i<m ; i++){
cur = cur->next;
if(cur == headNode){
i--;
}

}
T tmp = cur->value;
cur = cur->next;
cout << "-------------remove " << tmp << endl;
remove(tmp);
printList();
}
}
};

/*
void main(){
LinkedList<int> list;
int n = 9, k = 1, m = 5;

for(int i=1; i<=n; i++){
list.add(i);
}
// list.printList();

list.resefu();

}*/
温馨提示:内容为网友见解,仅供参考
无其他回答

编程完成一个带头结点的单链表建立,实现初始化、求表长、取元素、按值...
printf("请向链表中输入%d个整型数据:\\n",n);createList(l1,n);printf("当前链表为:\\n");

...尾插法建立带头结点的单链表,实现单链表上的插入,删除计数,查找,修改...
\/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) *\/ \/* 操作结果:用e返回L中第i个数据元素的值 *\/ Status GetElem(LinkList L,int i,ElemType *e){ int j;LinkList p; \/* 声明一结点p *\/ p = L->next; \/* 让p指向链表L的第一个结点 *\/ j = 1; \/* j为计数...

数据结构作业~急求~~~用c语言或c++ 使用单链表实现系统进程列表,完成...
1、数据域:用来存储本身数据 2、链域或称为指针域:用来存储下一个结点地址或者说指向其直接后继的指针。例:typedef strUCt node { char name[20];struct node *link;}stud;这样就定义了一个单链表的结构,其中char name[20]是一个用来存储姓名的字符型数组,指针*link是一个用来存储其直接后继...

用c语言调用实现带头结点的单链表的建立,插入,删除,查找的源代码
直接插入。小于的话,移动有序表后插入 int j= i-1; int x = a[i]; \/\/复制为哨兵,即存储待排序元素 a[i] = a[i-1]; \/\/先后移一个元素 while(x < a[j]){ \/\/查找在有序表的插入位置 a[j+1] = a[j]; j--; \/\/元素后移 } ...

用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找
int data;\/\/链表数据 struct LNode* next;\/\/链表指针 }LNode,*LinkList;\/*头插法-建立单链表*\/ LinkList HeadCreate(LinkList la){ int num;la=(LinkList)malloc(sizeof(LNode));\/\/建立头结点 la->next=NULL;scanf("%d",&num);while(num!=10){ LNode *p=(LinkList)malloc(sizeof(...

试写一算法在带头结点的单链表结构上实现线性表操作Length(L)。下面各...
intListLength_L(LinkList &L){int i=0;\/\/i存储链表长度,初始为0LinkList p=L;\/\/p为链表的指针,初始为头指针,指向头结点if(p) p=p-next;\/\/如果p指向的头结点不为空,p指向带数据的第一个结点while(p){\/\/如果p非空,i长度加1,且指向下一个结点p=p->next;i++;} return i;\/\/...

带头结点的单链表,其长度存放在头结点的数据域中,设计一算法求倒数第...
设单链表的长度为n,要查找表中第i个结点(即你要确定的第K个位置),仅当1≦i≦n时,i的值是合法的。但有时需要找头结点的位置,故我们将头结点看做是第0 个结点,其算法如下:Listnode * getnode(linklist head , int i){ int j;listnode * p;p=head;j=0;while(p–>next && j<I...

试写一算法在带头结点的单链表结构上实现线性表操作LENGTH(L)_百度知 ...
int length_l(linklist head){ linklist p=head;int i=0;while(p!=NULL){ i++;p=p->next;} return i;} 参考书上的正确答案,我也在学数据结构,加油啊!

试编写在带头结点的动态单链表上实现线性表操作LENGTH(L)的算法...
在return之前把i写到头节点的数据域不就行了吗?head->data = i;

编写程序,建立一个带有节点的单向链表,输入字符串,并按从小到大顺序组织...
printf("连续输入%d个数据(以空格隔开): ",n);head=CreateLink(n);printf("\\n原本链表的节点是: ");DispLink(head);LinkSort(head);printf("\\n从大到小排序之后: ");DispLink(head);printf("\\n");return 0;} 链表的具体存储表示为:① 用一组任意的存储单元来存放线性表的结点(这组...

相似回答